2014-06-27 26 views
6

Tôi đang làm việc trên ứng dụng Silverlight. Chúng tôi đang sử dụng gói nuget nhưng chúng tôi không kiểm tra trong các gói và các gói nên được khôi phục trong khi xây dựng. Giải pháp biên dịch tốt trong studio trực quan. Tôi cố gắng để thêm một nhiệm vụ biên dịch tại dòng lệnh sử dụng msbuildThiếu gói gói nuget khi sử dụng msbuild từ dòng lệnh

Exec {C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe $ slnFile/p: OutputPath = $ outputPath/p: Cấu hình = phát hành/p: SolutionDir = $ rootDir \ Source \/verbosity: tối thiểu/nologo/m:. 4} "BUILD FAILED

Trước khi làm bước này, tôi đang làm một NuGet khôi phục một cách rõ ràng

Exec {C: \ project \ nuget.exe restore $ solutionFile} "khôi phục không thành công"

Bước này đi kèm với thông báo "Tất cả các gói được liệt kê trong packages.config" đã được cài đặt.

Nhưng khi xây dựng bước thực tế xảy ra việc xây dựng không thành công với thông điệp

Dự án này tham chiếu NuGet gói (s) đang thiếu trên máy tính này. Bật Khôi phục gói NuGet để tải xuống. Để biết thêm thông tin, hãy xem http://go.microsoft.com/fwlink/?LinkID=322105. Tệp bị thiếu là \ Source \ .nuget \ NuGet.targets.

Tôi đang làm một NuGet khôi phục một cách rõ ràng và tôi đã kích hoạt

"Allow NuGet tải gói còn thiếu" trong visual studio và "Enable NuGet gói khôi phục" ở mức độ dung dịch.

nuget.config của tôi có "disableSourceControlIntegration" value = "true"

Tôi đã thấy vấn đề tương tự trong stackoverflow và tôi đã thử tất cả các giải pháp trên đã được đề nghị. Tôi không có một đầu mối tại sao nó thất bại mặc dù tất cả những điều này.

+0

Đối với S & G, hãy sao chép tệp nuget.targets của bạn vào thư mục gốc của \ Source – Will

+0

@Will Cảm ơn fr đầu vào. Tôi đã sao chép thư mục .nuget vào thư mục gốc nó trợ giúp dint. – sasikt

+0

Bạn có thể sửa và thêm tập tin nuget.config đầy đủ của mình không? Có thể so sánh được với [this] (https://gist.github.com/WillSullivan/37025f2af4908a74f267) – Will

Trả lời

2

Bạn không cần phải làm cả hai nuget.exe khôi phục và có MSBuild sử dụng NuGet.targets để khôi phục gói NuGet. Bạn nên chọn cái này hay cái kia.

tôi nghi ngờ vấn đề trong trường hợp của bạn được rằng $ rootDir không được định nghĩa và SolutionDir tài sản bạn đang đi qua để MSBuild là:

\ Source

Trong hồ sơ dự án của tôi, tôi có:

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" /> 

Vì vậy, nếu SolutionDir\ Source thì giải pháp sẽ không biên dịch với cùng thông báo lỗi.

2

Trong tôi, các tập tin csproj bằng cách nào đó đã có điều này:

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> 
<PropertyGroup> 
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> 
</PropertyGroup> 
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" /> 

Loại bỏ nó đã giải quyết được vấn đề.

+0

Tôi cũng đang đối mặt với cùng một vấn đề, trong đó các gói được khôi phục thông qua lệnh dòng lệnh nuget (nuget restore "D: \ ..") không được tham chiếu khi tôi biên dịch dự án từ dòng lệnh bằng MSbuild. Làm thế nào nó có được giải quyết? – user1925406

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