10


2

VS 2008では、中間ディレクトリを設定する方法はありますか。 .obj files go, not the final targets) in a C# project?

3 Answer


6


BaseIntermediateOutputPath msbuild varをオーバーライドする必要があります。詳細は ここ


1


私はVisual Studio Express 2013を使用してこれに対する解決策を見つけました。どのバージョンのVSがMSBuildを導入したのか忘れていますが、これが他のバージョンでも機能することを確信できません。 しかし、ここに行きます:

`C:\ Windows \ Microsoft.NET \ Framework`には.NETのバージョンに対応するサブディレクトリがあります。私のシステムのVSX2013では、興味のあるフォルダは `v4.0.30319`です。 (これは私がターゲットにしているものではなく、MSBuildで使用されている.NETバージョンです。)このフォルダ内には `.targets`ファイルがあり、それらはMSBuildルールの集まりです。

`Microsoft.CSharp.targets`の最初のほうに、より多くのルールファイルをインポートするいくつかのルールがあります。 これらのimport文の3番目は、ビルド変数 `CustomBeforeMicrosoftCSharpTargets`で指定されたファイルからインポートします。 あなたはルールを読むことによってこれの名前を理解することができるかもしれませんが、カスタムビルドステップを追加する方が簡単です

echo $(CustomBeforeMicrosoftCSharpTargets)

出力をビルドして見てください。 私の場合、フルパスは

C:\ Program Files(x86)\ MSBuild \ v12.0 \ Custom.Before.Microsoft.CSharp.targets
Note
私の場合は、フォルダ C:\ Program Files(x86)\ MSBuild \ 12.0`はありましたが、 v12.0`はありませんでした。

そこで(管理者として)フォルダを作成し、次のような `Custom.Before.Microsoft.CSharp.targets`ファイルを配置しました。

$(SolutionDir)\ Build \ $(MSBuildProjectName)
Note
`$(ProjectName)`は機能しません。 `$(MSBuildProjectName)`を使用してください。

私がビルドしたとき、OBJはプロジェクトの下ではなく、ソリューションの下のBuildディレクトリの下に配置されていました。

これは望みどおりには動作しませんでした:私は本当にこれらを `%TEMP%`に配置したかったのですが、変数は展開されなかったので、プロジェクトの下の `%TEMP%`という名前のビルドフォルダーになりました。 展開したパスをルール内に配置しても問題ありませんでしたが、他の%APPDATA%サブフォルダはパーミッションの問題で失敗しました。

私はこれがこれらの変数のいずれかを設定するために使用できると思います。デフォルトの `.TARGETS`ファイルを読むのは雑用ですが、そこには役に立つコメントがいくつかあります。


0


私はそうは思わない。 ただし、ビルド後のイベントでは、実行可能ファイルdllを別のフォルダにコピーすることはできます。 (プロジェクトプロパティの[ビルドイベント]タブ)