我們在VS2008中使用.NET 3.5。我有一個約20個項目的解決方案,隨着應用程序的增長和增加新的模塊,這個數字將隨着時間的推移而增長。今天我需要爲每個項目設置一個屬性。我不得不編輯每個文件的csproj中加入如下:MSBuild - 爲解決方案設置屬性
<Target Name="BeforeBuild">
<CreateProperty Condition=" '$(SolutionDir)' != '' And '$(SolutionDir)' != '*Undefined*' "
Value="$(SolutionDir)Tools\MSBuild">
<Output TaskParameter="Value" PropertyName="AlToolPath" />
</CreateProperty>
</Target>
這是爲了讓項目找到存儲在我的源代碼庫的裝配接頭(Al.exe工具),以便構建是機器不可知(可以使用.NET檢出並在任何機器上構建,而無需安裝SDK)。該解決方案建立在開發人員使用MSBuild的命令行上,安裝批處理文件,CCNet等。
無論如何,我尋找了一個更好的方法來做到這一點(即像解決方案級別的屬性),但找不到一個。我知道可以在MSBuild命令行中設置屬性值,但這並不適合我,因爲所有現有的和將來的命令行都必須包含它。我還想過在第一個構建的項目中調用一個before目標,以便使用自定義任務來設置環境變量,並在最後一個項目中設置一個after目標以將其刪除,但是,與單獨編輯所有項目文件相比,這看起來更加沉重和脆弱。
請讓我知道你是否做過這樣的事情,或者知道一種方法來設置一個屬性一次可以被多個項目(包括我沒有經驗的.NET 4/VS2010)使用的解決方案。請記住,我們使用MSBuild構建sln文件,而不是單個項目。
我喜歡這個解決方案,但它仍然意味着項目文件需要至少編輯一次。 – Mafuba 2010-02-21 20:51:48
@Mafuba我已使用NuGet自動執行此操作。 – 2014-04-03 09:12:53
如果共享道具文件被稱爲「Directory.Build.props」,那麼使用VS 2017將自動導入到目錄層次結構中的所有項目中。 – 2017-08-01 06:12:25