2011-10-13 32 views
7

Tôi đang cố gắng thêm XmlnsDefinitionAttributes vào assembly của mình. Tôi sử dụng TeamCity để quản lý các dự án của mình. Có một bước Gói NuGet trong cấu hình xây dựng của tôi.NuGet không thể trích xuất siêu dữ liệu từ assembly với XmlnsDefinitionAttribute

Đây là phần có liên quan của nhật ký xây dựng không thành công.

[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 

Phần giống nhau để tạo thành công trông như thế này.

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

Tại thời điểm này, nó sẽ xuất tất cả các cài đặt.

XmlnsDefinitionAttribute My được định nghĩa trong AssemblyInfo.cs như sau

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

Bất kỳ ý tưởng như những gì tôi đang làm sai?

Sửa

Dưới đây là toàn AssemblyInfo.cs tôi

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

Chỉnh sửa 2

Tôi đã cài đặt NuGet tại địa phương và tôi nhận được lỗi tương tự. TeamCity dường như không có hiệu lực.

+0

Có gì trong AssemblyInfo.cs của bạn? – jrummell

+0

Vì vậy, khi bạn loại bỏ các thuộc tính XmlnsDefinition, NuGet tạo ra các gói phần mềm tốt? Điều đó có vẻ kỳ lạ vì điều đó không ảnh hưởng đến bất cứ điều gì. – Haacked

+0

@Haacked Yup, hoạt động tốt mà không có XmlnsDefinition. Nó rất kỳ quặc. – cadrell0

Trả lời

1

Nuget sẽ cố gắng lấy siêu dữ liệu từ hội đồng, và bằng cách thực hiện, nó sẽ tải tất cả các thuộc tính assembly.

Sự cố này xảy ra do XmlnsDefinition được định nghĩa trong System.Windows assembly (System.Windows.dll) và hội đồng cụ thể đó thường không được xuất ra thư mục xây dựng, vì vậy NuGet không thể tìm thấy và ném ngoại lệ (bạn chỉ có thể phát hiện ngoại lệ nếu bạn chạy NuGet từ mã!)

Cách tốt nhất tôi tìm thấy để bỏ qua vấn đề này là đảm bảo tệp System.Windows.dll nằm trong cùng thư mục với cụm chính khi bạn chạy NuGet. exe

+1

Nó đưa ra cảnh báo tương tự với cụm từ 'System.Windows.dll' trong thư mục đầu ra, trong thư mục gốc của dự án, hoặc trong thư mục NuGet. –

1

A solution là để biên dịch với Nền tảng được đặt thành AnyCPU.

0

Tôi đang đối mặt với vấn đề này - xây dựng nó trong TFS Build-Agent.

tôi có 2 "giải pháp" cho vấn đề này, nhưng cả hai đều có "vấn đề" riêng của họ:

1.) Kích hoạt "Sao chép địa phương" để tham khảo "System.Windows".

  • vấn đề với cách tiếp cận này .... System.Windows.dll có thể được bao gồm trong XAP, thông thường là không. Điều này nghe nguy hiểm ....
    • (mặc dù - người ta có thể tranh luận rằng "XmlnsDefinitionAttribute" sẽ không bao giờ được sử dụng trong "App" hội, nhưng chỉ trong DLL Thư viện .... vì vậy đây "vấn đề" là tranh luận?

2.) Sao chép Silverlight System.Windows.dll vào con đường nuget.exe - cho TFS (2017) Xây dựng Đại lý, trên các hệ thống 64bit (trong đó - trái với một số ý kiến ​​trước đó - không nơi làm việc):

copy "c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0\System.Windows.dll" "C:\agent\externals\nuget" 
  • các vấn đề ở đây thể là:
    • Cập nhật SDK Silverlight? (sao chép lại?)
    • Bản dựng không phải Silverlight? (Sẽ NuGet nhặt System.Windows.dll sai?)

Vì vậy - mà giải pháp các bạn sẽ chọn cái nào?

Cập nhật: Hiện tại, tôi sẽ sử dụng giải pháp # 1 vì âm thanh ít nguy hiểm hơn.

Các vấn đề liên quan