NuGet не удалось извлечь метаданные из сборки с помощью XmlnsDefinitionAttribute - PullRequest
7 голосов
/ 14 октября 2011

Я пытаюсь добавить 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")]

Есть идеи, что я делаю не так?

Редактировать

Вот мой полный 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 ]

1 голос
/ 31 декабря 2013

Решение состоит в том, чтобы скомпилировать с Платформой , установленной в AnyCPU .

1 голос
/ 13 июля 2012

Nuget попытается получить метаданные из сборки и, выполнив команду do, загрузит все атрибуты сборки.

Эта проблема возникает из-за того, что XmlnsDefinition определено в сборке System.Windows (System.Windows.dll), и эта конкретная сборка обычно не выводится в папку сборки, поэтому NuGet не может найти ее и выдает исключение (вы можете определить исключение только при запуске NuGet из кода!)

Лучший способ обойти эту проблему - убедиться, что файл System.Windows.dll находится в той же папке, что и основная сборка, при запуске NuGet.exe

0 голосов
/ 03 мая 2017

Я тоже столкнулся с этой проблемой - собираю ее в TFS Build-Agent.

У меня есть 2 «решения» этой проблемы, но у обоих есть свои «проблемы»:

1.) Активируйте «Копировать локально» для ссылки «System.Windows».

  • проблема с этим подходом .... System.Windows.dll может быть включена в XAP, чего обычно нет. Это звучит опасно ....
    • (хотя - можно утверждать, что «XmlnsDefinitionAttribute» никогда не будет использоваться в «App» Ассамблеи, но только в библиотеке DLL, .... поэтому эта «проблема» спорно

2.) Скопируйте Silverlight System.Windows.dll в путь nuget.exe - для агента сборки TFS (2017), на 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, поскольку оно звучит менее опасно.

...