我正在尝试将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似乎没有任何效果。
答案 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”。
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"
那么 - 你们会选择哪种解决方案?
更新:现在我将使用解决方案#1,因为它听起来不那么危险。