2009-09-29 25 views
10

在VS 2008中,有沒有辦法在C#項目中設置中間目錄(.obj文件去,而不是最終目標)?在C#項目中設置中間目錄

+0

+1爲好問題。我試圖做同樣的事情出於同樣的原因(不污染源編譯器輸出源目錄)和失敗(沒有安全警告對話框 - 但這是不能接受的)。 – 2010-06-16 14:32:33

+0

有人知道這種情況是否在Visual Studio 2010/.NET4中發生了變化...? – 2010-06-16 14:38:13

回答

0

我不這麼認爲。但是,您可以將您的可執行文件,dll等任何文件複製到生成後事件中的另一個文件夾中。 (項目屬性中的「生成事件」選項卡)

6

您需要重寫BaseIntermediateOutputPath msbuild var,關於它的更多內容here

+1

這確實有效,但我一直在尋找一種方法在每個項目中進行設置,以便從IDE構建起來不會污染源文件夾。但是,在項目中設置BaseIntermediateOutputPath會觸發安全警告。唉,這似乎不可能。嘆... – 2009-09-29 15:02:52

+0

安全警告在那裏通知您發生了一些與衆不同的事情,您可以靜音警告,直到您更改其他事情時纔會再次看到它。 – 2009-09-29 15:44:43

+2

關於定製中間輸出位置沒有任何不尋常的事情。 Visual Studio高興地接受C++項目自定義中間文件位置(通過IntDir屬性)而沒有安全警告對話框,但它確實在C#項目中完成相同的操作時會引發發脾氣。 – 2010-06-16 14:25:16

1

我找到了一個使用Visual Studio Express 2013的解決方案;我忘記了哪個版本的VS引入了MSBuild,並且我不能肯定地說這將適用於任何其他版本。但是這裏有:

C:\Windows\Microsoft.NET\Framework是對應於.NET版本的子目錄; VSX2013在我的系統上感興趣的文件夾是v4.0.30319。 (這是MSBuild使用的.NET版本,而不是我定位的版本。)在此文件夾中有.targets文件,它們是MSBuild規則的集合。

Microsoft.CSharp.targets附近的一些規則將導入更多的規則文件。這些導入語句中的第三個從構建變量CustomBeforeMicrosoftCSharpTargets指定的文件導入。您可能能夠通過閱讀規則弄清楚這個名字,但它更容易添加

echo $(CustomBeforeMicrosoftCSharpTargets) 

構建的自定義生成步驟,並期待在輸出。在我的情況下,全路徑是

C:\Program Files (x86)\MSBuild\v12.0\Custom.Before.Microsoft.CSharp.targets 

注:在我的情況下,已經有一個文件夾C:\Program Files (x86)\MSBuild\12.0但不v12.0

所以(如管理員)我創建的文件夾,並放置在Custom.Before.Microsoft.CSharp.targets文件看起來像這樣:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <BaseIntermediateOutputPath>$(SolutionDir)\Build\$(MSBuildProjectName)</BaseIntermediateOutputPath> 
    </PropertyGroup> 
</Project> 

注:$(ProjectName)不起作用,使用$(MSBuildProjectName)

當我建成,OBJ文件是一個build目錄下放置的解決方案下,不根據該項目,在一個子目錄與典型的命名約定:DebugReleasex86\Debugx64\Release

這並沒有完全按照要求工作:我真的想把它們放在%TEMP%中,但變量沒有擴展,所以我最終在名爲%TEMP%的項目下創建了一個構建文件夾。將擴展路徑放在規則中工作得很好,但其他子文件夾%APPDATA%由於權限問題而失敗。

我認爲這可以用來配置任何這些變量;閱讀默認的.TARGETS文件是一件苦差事,但其中有一些有用的評論。

+0

進一步說明:上述方法適用於VS CE 2017. CustomBeforeMicrosoftCSharpTargets具有值C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ v15.0',並且I必須創建'v15.0'文件夾;不需要對XML進行任何更改。 – 2017-06-24 00:31:51