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

时间:2011-10-13 21:01:16

标签: silverlight silverlight-4.0 nuget xml-namespaces

我正在尝试将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

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

[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")]

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

修改

这是我的完整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")]

修改2

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

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

A solution是在平台设置为 AnyCPU 的情况下进行编译。

答案 2 :(得分:0)

我也面临这个问题 - 在TFS Build-Agent中构建它。

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

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

  • 这种方法的问题...... System.Windows.dll 可能包含在XAP中,通常不包含在XAP中。这听起来很危险......
    • (虽然 - 有人可能会说“XmlnsDefinitionAttribute”永远不会在“App”程序集中使用,但是只能在库DLL中使用 ....所以这个“问题”没有实际意义吗?

2。)将Silverlight System.Windows.dll复制到nuget.exe路径中 - 对于TFS(2017)Build Agent,在64位系统上(与之前的一些评论相反 - 工作):

copy "c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0\System.Windows.dll" "C:\agent\externals\nuget"
  • 这里的问题可以
    • Silverlight SDK更新? (再次复制?)
    • 非Silverlight构建? (NuGet会选择错误的System.Windows.dll吗?)

那么 - 你们会选择哪种解决方案?

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