NuGet无法使用XmlnsDefinitionAttribute从程序集中提取元数据

cad*_*ll0 7 silverlight xml-namespaces silverlight-4.0 nuget

我试图将XmlnsDefinitionAttributes添加到我的程序集.我使用TeamCity来管理我的项目.我的构建配置中有一个NuGet Package Pack步骤.

以下是失败的构建日志的相关部分.

[16:42:08]: Starting: C:\Windows\system32\cmd.exe /c C:\BuildAgent\tools\NuGet.CommandLine.1.5.20905.5.nupkg\tools\NuGet.exe pack C:\BuildAgent\work\5f0e65f22ca1527\MyProject\MyProject.csproj -OutputDirectory \\server\Packages -BasePath C:\BuildAgent\work\5f0e65f22ca1527 -Verbose -Version 1.0.97.1034 -Symbols -Properties Configuration=Release
[16:42:08]: in directory: C:\BuildAgent\work\5f0e65f22ca1527
[16:42:08]: Attempting to build package from 'MyProject.csproj'.
[16:42:09]: Packing files from 'C:\BuildAgent\work\5f0e65f22ca1527\MyProject\Bin\Release'.
[16:42:09]: WARNING: Unable to extract metadata from 'MyProject.dll'.
[16:42:09]: Using 'MyProject.nuspec' for metadata.
[16:42:09]: The replacement token 'title' has no value.
[16:42:09]: Process exited with code 1
Run Code Online (Sandbox Code Playgroud)

成功构建的相同部分如下所示.

[16:42:54]: Starting: C:\Windows\system32\cmd.exe /c C:\BuildAgent\tool\NuGet.CommandLine.1.5.20905.5.nupkg\tools\NuGet.exe pack C:\BuildAgent\work\5f0e65f22ca1527\MyProject\MyProject.csproj -OutputDirectory \\server\Packages -BasePath C:\BuildAgent\work\5f0e65f22ca1527 -Verbose -Version 1.0.98.1035 -Symbols -Properties Configuration=Release
[16:42:54]: in directory: C:\BuildAgent\work\5f0e65f22ca1527
[16:42:54]: Attempting to build package from 'MyProject.csproj'.
[16:42:54]: Packing files from 'C:\BuildAgent\work\5f0e65f22ca1527\MyProject\Bin\Release'.
[16:42:54]: Using 'MyProject.nuspec' for metadata.
Run Code Online (Sandbox Code Playgroud)

此时它输出所有设置.

我的XmlnsDefinitionAttribute在AssemblyInfo.cs中定义如下

[assembly: XmlnsDefinition("http://schemas.company.com/myproject", "MyProject")]
Run Code Online (Sandbox Code Playgroud)

关于我做错了什么的任何想法?

编辑

这是我的完整AssemblyInfo.cs

using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Markup;

[assembly: AssemblyTitle("MyProject")]
[assembly: AssemblyDescription("MyProject Description")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("MyProject")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2011")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

[assembly: ComVisible(false)]

[assembly: Guid("23774732-4f22-4366-a150-03745e93111b")]

[assembly: AssemblyVersion("1.5.2")]
[assembly: AssemblyFileVersion("1.5.2")]

[assembly: XmlnsDefinition("http://schemas.company.com/myproject", "MyProject")]
[assembly: XmlnsDefinition("http://schemas.company.com/myproject", "MyProject.Namespace1")]
[assembly: XmlnsDefinition("http://schemas.company.com/myproject/newschema", "MyProject.NewSchema")]
[assembly: XmlnsDefinition("http://schemas.company.com/myproject/newschema", "MyProject.NewSchema.Namespace1")]
Run Code Online (Sandbox Code Playgroud)

编辑2

我在本地安装了NuGet,我收到同样的错误.TeamCity似乎没有任何效果.

Ped*_*mas 1

Nuget将尝试从程序集中获取元数据,并通过执行do,它将加载所有程序集属性。

出现此问题的原因是XmlnsDefinition是在 System.Windows 程序集 (System.Windows.dll) 中定义的,并且该特定程序集通常不会输出到生成文件夹,因此 NuGet 无法找到它并引发异常(您只能发现如果您从代码运行 NuGet,则会出现异常!)

我发现绕过此问题的最佳方法是确保运行 NuGet.exe 时 System.Windows.dll 文件与主程序集位于同一文件夹中