2014-02-05 48 views
23

我正在嘗試我的第一個NuGet包,並且遇到了一些麻煩,我有一個相當簡單的項目,和一個非常簡單的.nuspec文件:NuGet包失敗,「無法找到'@(_ OutputPathItem - >'%(FullPath)...」

<?xml version="1.0"?> 
<package > 
    <metadata> 
    <id>$id$</id> 
    <version>$version$</version> 
    <title>$title$</title> 
    <authors>$author$</authors> 
    <owners>$author$</owners> 
    <description>$description$</description> 
    </metadata> 
</package> 

當我運行的NuGet包使用此命令行:

NuGet.exe pack mylibrary.csproj -Verbosity detailed -Properties Configuration=Debug 

我得到這個錯誤:

NuGet.CommandLineException: Unable to find '@(_OutputPathItem->'%(FullPath)mylibrary.dll')'. Make sure the project has been built. 
    at NuGet.Commands.ProjectFactory.BuildProject() 
    at NuGet.Commands.ProjectFactory.CreateBuilder(String basePath) 
    at NuGet.Commands.PackCommand.BuildFromProjectFile(String path) 
    at NuGet.Commands.PackCommand.BuildPackage(String path) 
    at NuGet.Commands.PackCommand.ExecuteCommand() 
    at NuGet.Commands.Command.Execute() 
    at NuGet.Program.Main(String[] args) 

的OUTP ut文件肯定在bin \ Debug文件夾中,但NuGet顯然沒有找到它們。

這顯然只有在.csproj文件的ToolsVersion設置爲3.5或更低時纔會發生。將ToolsVersion設置爲4.0可以解決問題。

當調用_project.GetPropertyValue("TargetPath")(ProjectFactory.cs〜296)時,MSBuild 3.5返回未擴展的屬性值,其中MSBuild 4.0返回展開屬性值。

回答

1

這顯然只有在.csproj文件的ToolsVersion設置爲3.5或更低時纔會發生。將ToolsVersion設置爲4.0可以解決問題。

我已經創建了一個問題,對於這裏的的NuGet項目團隊:https://nuget.codeplex.com/workitem/4012

52

我們有同樣的問題。加入

-Prop Platform=AnyCPU 

到命令行使它爲我們工作。

+3

有沒有什麼辦法可以從nuspec開始這項工作,而不需要從命令行指定它呢? –

+0

我們使用惠普端口複製器和我們的筆記本電腦,將系統環境變量'PLATFORM'設置爲'BNB'。請參閱[爲什麼我的平臺環境變量定義爲'BNB'?](http://stackoverflow.com/questions/2507856/why-is-my-platform-environment-variable-defined-as-bnb)。 –

+2

在(2.7)的最新版本中,看起來像-Prop現在稱爲 - 屬性。對我來說,一個可行的例子是:nuget pack my.csproj -Properties「Platform = AnyCpu; version = 1.0; configuration = Debug」 –

0

如果程序集的.NET Framework版本設置爲4.0,這也可能會出現相同的錯誤。