Silverlight NuGet无法从具有XmlnsDefinitionAttribute的程序集提取元数据

Silverlight NuGet无法从具有XmlnsDefinitionAttribute的程序集提取元数据,silverlight,silverlight-4.0,nuget,xml-namespaces,Silverlight,Silverlight 4.0,Nuget,Xml Namespaces,我正在尝试将XmlnsDefinitionAttributes添加到我的程序集。我使用TeamCity来管理我的项目。在我的构建配置中有一个NuGet包包步骤 以下是失败的生成日志的相关部分 [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\5f0e6

我正在尝试将XmlnsDefinitionAttributes添加到我的程序集。我使用TeamCity来管理我的项目。在我的构建配置中有一个NuGet包包步骤

以下是失败的生成日志的相关部分

[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
成功构建的同一部分如下所示

[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.
此时,它输出所有设置

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

[assembly: XmlnsDefinition("http://schemas.company.com/myproject", "MyProject")]
你知道我做错了什么吗

编辑

这是我的完整组装信息

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")]
编辑2


我在本地安装了NuGet,并且得到了相同的错误。TeamCity似乎没有任何效果。

Nuget将尝试从程序集获取元数据,通过这样做,它将加载所有程序集属性

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


我发现绕过此问题的最佳方法是,在运行NuGet.exe时,确保System.Windows.dll文件与主程序集位于同一文件夹中,即使用平台进行编译,将设置为任何CPU

我也面临此问题-在TFS Build Agent中构建它

对于这个问题,我有两个“解决方案”,但两者都有自己的“问题”:

1.)激活“复制本地”以参考“System.Windows”

  • 这种方法的问题是….System.Windows.dll可能包含在XAP中,而它通常不包含在XAP中。这听起来很危险。。。。
    • (尽管-有人可能会说“XmlnsDefinitionAttribute”永远不会在“应用程序”程序集中使用,而只会在库DLL中使用……所以这个“问题”是没有意义的
2.)将Silverlight System.Windows.dll复制到64位系统上的TFS(2017)构建代理的nuget.exe路径中(与之前的一些评论相反,该路径确实有效):

  • 这里的问题可能是:
    • Silverlight SDK更新?(复印一遍吗?)
    • 非Silverlight构建?(NuGet会选择错误的System.Windows.dll吗?)
那么,你们会选择哪种解决方案


更新:现在我将使用解决方案#1,因为它听起来不那么危险。

AssemblyInfo.cs中有什么?所以当您删除XmlnsDefinition属性时,NuGet创建的包还可以吗?这似乎很奇怪,因为这不应该影响任何事情。@Haacked-Yup,在没有xmlns定义的情况下工作正常。这很奇怪。它对输出文件夹、项目根目录或NuGet文件夹中的
System.Windows.dll
程序集给出了相同的警告。
copy "c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0\System.Windows.dll" "C:\agent\externals\nuget"