2011-10-13 19 views
7

Estoy intentando agregar XmlnsDefinitionAttributes a mi ensamblado. Uso TeamCity para administrar mis proyectos. Hay un paso NuGet Package Pack en mi configuración de compilación.NuGet no puede extraer metadatos del ensamblado con XmlnsDefinitionAttribute

Aquí está la sección relevante de un log de compilación fallido.

[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 

La misma sección para una construcción exitosa se parece a esto.

[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. 

En este punto, emite todos los ajustes.

Mi XmlnsDefinitionAttribute se define de la siguiente manera en AssemblyInfo.cs

[assembly: XmlnsDefinition("http://schemas.company.com/myproject", "MyProject")] 

alguna idea de lo que estoy haciendo mal?

Editar

Aquí está mi AssemblyInfo.cs completos

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

Editar 2

he instalado localmente NuGet y yo estoy recibiendo el mismo error. TeamCity no parece tener ningún efecto.

+0

¿Qué hay en su AssemblyInfo.cs? – jrummell

+0

Entonces, cuando elimina los atributos de XmlnsDefinition, ¿NuGet crea el paquete bien? Eso parece extraño ya que eso no debería afectar nada. – Haacked

+0

@Hacked Yup, funciona bien sin XmlnsDefinition. Es muy extraño – cadrell0

Respuesta

1

Nuget intentará obtener metadatos del ensamblaje, y al hacerlo, cargará todos los atributos de ensamblaje.

Este problema se debe a que XmlnsDefinition se define en el ensamblado System.Windows (System.Windows.dll), y ese ensamblado en particular normalmente no está superado en la carpeta de compilación, por lo que NuGet no puede encontrarlo y lanza una excepción (solo puede detectar la excepción si ejecuta NuGet desde el código!)

La mejor manera que encontré para evitar este problema es asegurarme de que el archivo System.Windows.dll está en la misma carpeta que el ensamblado principal cuando ejecuta NuGet. exe

+1

Da la misma advertencia con el ensamblado 'System.Windows.dll' en la carpeta de salida, en la raíz del proyecto o en la carpeta NuGet. –

1

A solution es compilar con Plataforma conjunto a Cualquier CPU.

0

También me enfrento a este problema, creándolo en TFS Build-Agent.

tengo 2 "soluciones" a este problema, pero ambos tienen sus propios "problemas":

1.) Activar "Copia Local" para "System.Windows" de referencia.

  • el problema con este enfoque .... System.Windows.dll podría incluirse en XAP, que normalmente no lo es. Esto suena peligroso ....
    • (aunque - se podría argumentar que "XmlnsDefinitionAttribute" nunca va a utilizar en la "aplicación" de la Asamblea, pero solamente en DLL Biblioteca .... por lo que este "problema" es ¿discutible?

2.) Copia el Silverlight System.Windows.dll en la trayectoria nuget.exe - TFS (2017) Construir agente, en sistemas de 64 bits (que - al contrario que algunos comentarios anteriores - hace el trabajo):

copy "c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0\System.Windows.dll" "C:\agent\externals\nuget" 
  • el problema aquí podría ser:
    • Actualizaciones de Silverlight SDK? (¿hacer la copia de nuevo?)
    • No Silverlight Builds? (NuGet sería recoger el System.Windows.dll mal?)

Por lo tanto - qué solución sería que ustedes elegir?

Actualización: Por ahora usaré la solución n. ° 1, ya que suena menos peligroso.

Cuestiones relacionadas