2012-01-04 57 views
2

我已經構建了一個自定義的msbuild deploy.targets文件,它允許我將生成的二進制文件發佈到我在命令行中指定的目錄。這也就意味着,如果我跑如何獲取Visual Studio 2010將變量傳遞給MSBuild?

$>的MSBuild/P:DestServer = \ MYSERVER \最終-DEST

然後我的項目將被編譯,得到的* .DLL文件將被複制到一個臨時實例 - 在這種情況下,myserver上的目錄是final-dest。我想要這個功能,因爲當我做一個好的編譯時,我需要在該目錄中的* .dlls的副本,但我也希望它們是本地的。

這是我的問題 - 我真的很想不必從命令行發出這個問題。當我選擇發佈構建配置(Project | Properties | Build)時,我希望能夠指定/ p:DestServer = \ myserver \ final-dest作爲參數,msbuild將使用,因爲它的常規構建

我該在哪裏指定?

在項目屬性|構建事件,我可以指定預構建或事後構建事件 - 但這不是「構建」事件的一部分?理想情況下,如果有人可以給我在Visual Studio 2010中的菜單順序,我會很感激。

回答

3

如果你不想編輯項目文件 - 有是另一種解決方案

每個* .csproj文件包含:<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

在我的電腦和.NET 4.0這個文件位於"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets"

添加新PropertyGroupProject,如:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
... 
<PropertyGroup> 
    <DestServer>\myserver\final-dest</DestServer> 
    </PropertyGroup> 
... 
<!-- a lot of stuff --> 
... 
</Project> 

所有你現在構建(無論是從的MSBuild和Visual Studio)將使用此屬性,所以您不需要修改.csproj或從命令行通過參數

更新

這是一種快速和骯髒的方式,因爲它會覆蓋在該PC上構建的所有項目。 只能這樣做,如果有很多項目,並且您沒有修改它們的權限

通常,您只需在單個項目中添加一個新的PropertyGroup即可。

如果有很多的項目,你需要這個變量,您可以創建和導入自定義擴展的目標波紋管默認目標:

App1.csproj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
... 
    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 
    <Import Project="..\myCustom.targets" /> 
... 
</Project> 

myCustom.targets

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <DestServer>\myserver\final-dest</DestServer> 
    </PropertyGroup> 
</Project> 
+2

所以這個變量不在源代碼控制中,即使在源代碼樹中,並且適用於本機上構建的每個單個項目?不是一個好主意海事組織,或許可以作爲一個快速入侵......任何你不想編輯項目文件的原因? – 2014-05-20 16:03:54

+0

我有50多個項目啓用了Code Contracts,這是在我的本地PC上快速禁用它的唯一方法。在所有配置和幾個分支中修改所有這些項目是一件痛苦的事情。 – 2014-05-21 11:03:20

+0

[足夠公平](http://meta.stackexchange.com/questions/700/can-we-get-rid-of-the-threshold-of-15-chars-for-comments) – 2014-05-21 13:38:02

1

我不知道通過VisualStudio GUI設置它的方法(可能沒有),但您應該可以編輯.csproj/.vcproj文件以將該屬性添加到適當的配置中:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 
    <ProductVersion>9.0.30729</ProductVersion> 
    ... 
    ...etc 
    ... 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <DestServer>\myserver\final-dest</DestServer> <!-- <<<<< HERE <<<<< --> 
    ... 

Visual Studio將保持這種就算你通過GUI編輯其他特性(至少趨於 ...)

+0

那麼,有沒有辦法再指定多個屬性組,然後根據活動構建配置的屬性組選擇? – 2012-01-05 11:41:48

+0

@AffableGeek每個平臺/配置組合已經有一個屬性組,所以你可以在相關的地方插入你的屬性。另外,爲了避免重複你自己,你可以創建一個完全獨立的PropertyGroup,它具有你所需要的條件,比如'Condition =''$(Configuration)'=='Release'「' – 2012-01-05 11:46:06