2009-11-21 122 views
16

有沒有辦法使用MSBuild擴展包與「本地」引用,不需要您運行安裝程序?換句話說,您是否可以將目標存儲在解決方案項目文件夾中,以便每位開發人員不必安裝它?是否可以在不安裝的情況下使用MSBuild Extension Pack?

+1

這種「安裝」的名稱稱爲「xcopy部署」 – 2009-11-21 22:18:56

+0

我最後的評論在語法上有點差。對不起,我很困... – 2009-11-21 22:19:32

+0

我不關注。我想知道是否可以在機器上的任何位置引用MSBuild擴展,而無需運行msi來安裝擴展。 – Bob 2009-11-21 22:20:24

回答

20

您必須在任務的導入統計之前聲明屬性ExtensionTasksPath。例如看一看:

<?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> 

該社區的MSBuild任務相似,但屬性名爲MSBuildCommunityTasksLib。我認爲SDC任務叫做TasksPath

+0

謝謝!我剛剛在MSBuild上觀看了你的DNRtv劇集,他們非常棒。 – Bob 2009-11-22 15:10:46

2

我很難得到這個工作相對路徑(即不是C:\等等,但.. \等等)。

這是因爲如果它是相對的,則無法重新使用ExtensionTasksPath變量,因爲您的文件(.csproj)和MsBuild.ExtensionPack.tasks文件位於不同位置,從而導致相對於其他值的不同值路徑。

這到底是什麼得到了它的工作,我(把你的.csproj文件的頂部):

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

爲什麼需要「.. \ 4.0 \」,而不僅僅是原因「 「(空白)是因爲MsBuild.ExtensionPack.tasks文件檢測到空白並且做了一些不同的事情(如果是這種情況)。如果我想稍後升級,我不想破解MsBuild.ExtensionPack.tasks文件。

+0

這對我有效。謝謝! – 2014-08-21 21:05:54

相關問題