2009-11-21 31 views
16

Có cách nào để sử dụng Gói mở rộng MSBuild có tham chiếu "cục bộ" không yêu cầu bạn chạy trình cài đặt không? Nói cách khác, bạn có thể lưu trữ các mục tiêu trong thư mục các mục giải pháp sao cho mọi nhà phát triển không phải cài đặt nó?Có thể sử dụng MSBuild Extension Pack mà không cần cài đặt không?

+1

Tên cho loại "cài đặt" đó được gọi là "triển khai xcopy" –

+0

Nhận xét cuối cùng của tôi hơi kém về ngữ pháp. Xin lỗi, tôi buồn ngủ ... –

+0

Tôi không theo. Tôi đã tự hỏi nếu bạn có thể tham khảo MSBuild Extensions tại bất kỳ vị trí nào trên máy, mà không cần chạy msi để cài đặt Tiện ích mở rộng. – Bob

Trả lời

20

Bạn phải khai báo thuộc tính, ExtensionTasksPath, trước khi nhập khẩu cho các tác vụ. Ví dụ có một cái nhìn tại địa chỉ:

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <ExtensionTasksPath Condition="'$(ExtensionTasksPath)' == ''">E:\Data\Development\My Code\Community\MSBuild\ExtensionPack\</ExtensionTasksPath> 
    </PropertyGroup> 

    <Import Project="$(ExtensionTasksPath)MSBuild.ExtensionPack.tasks"/> 

    <Target Name="Demo"> 
    <MSBuild.ExtensionPack.FileSystem.File TaskAction="GetTempFileName"> 
     <Output TaskParameter="Path" PropertyName="TempPath"/> 
    </MSBuild.ExtensionPack.FileSystem.File> 

    <Message Text="TempPath: $(TempPath)" /> 
    </Target> 

</Project> 

Nhiệm vụ MSBuild cộng đồng là tương tự nhưng tài sản được đặt tên MSBuildCommunityTasksLib. Tôi nghĩ rằng đối với các nhiệm vụ SDC, nó được gọi là TasksPath.

+0

Cảm ơn bạn! Tôi vừa xem các tập phim DNRtv của bạn trên MSBuild và chúng thật tuyệt vời. – Bob

2

Tôi gặp sự cố khi làm việc này với các đường dẫn tương đối (tức là không phải c: \ blah nhưng .. \ blah).

Điều này là do bạn không thể sử dụng lại biến ExtensionTasksPath nếu nó là tương đối, vì tệp của bạn (.csproj) và tệp MsBuild.ExtensionPack.tasks ở các vị trí khác nhau, dẫn đến giá trị khác nhau cho người thân con đường.

Trong mục đích này là những gì nó đã làm việc cho tôi (đặt ở phía trên của file csproj của bạn):

<PropertyGroup> 
    <ExtensionTasksPath Condition="'$(ExtensionTasksPath)' == ''">..\4.0\</ExtensionTasksPath> 
    </PropertyGroup> 
    <Import Project="..\references\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks"/> 

Lý do tại sao bạn cần ".. \ 4.0 \" thay vì chỉ " "(trống) là vì tệp MsBuild.ExtensionPack.tasks phát hiện trống và thực hiện một số nội dung khác nhau nếu trường hợp đó xảy ra. Tôi không muốn hack file MsBuild.ExtensionPack.tasks trong trường hợp tôi muốn nâng cấp nó sau này.

+0

Điều này làm việc cho tôi. Cảm ơn! –

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