7

Visual Studioの.Netプロジェクトにアプリケーション構成ファイルを追加すると、そのファイルに名前が付けられapp.config、(ビルド時に)名前が.に変更されApplicationName.configます。

私は約40のプロジェクトで解決策を持っています。それらのかなりの数にlog4net機能を追加したいと思います。したがって、プロジェクトごとにファイルを追加しますapp.log4net。次に、次のようなビルド後のイベントを宣言します。

copy $(ProjectDir)app.log4net $(TargetPath).log4net

それはうまくいきます。しかし、明示的なビルド後のイベントなしで同じことを達成するための組み込みの方法があるかどうか疑問に思いました。

編集:私はJaredParとSimon Mourierによって提案された両方のソリューションが好きですが、それらは私が望んでいたものを提供しません。このためのカスタムツールまたはMsBuildルールがあると、(プロジェクトの他のプログラマーにとって)透過性が低くなるか、少なくとも現在使用しているビルド後のイベントを使用するよりも複雑になります。それでも、MsBuildは同様の問題を解決するための正しい 場所だと思います。

4

2 に答える 2

6

この場合、app.configの名前を更新しているのはVisual Studioではなく、VisualStudioから独立したコアMSBuildルールです。app.configモデルをエミュレートする場合は、これが採用する必要のあるアプローチです。

app.configのコピーを制御するビルドシーケンスの2つの部分は、Microsoft.Common.targetsにあります。

最初にファイルの名前が計算されます

<ItemGroup>
    <AppConfigWithTargetPath Include="$(AppConfig)" Condition="'$(AppConfig)'!=''">
        <TargetPath>$(TargetFileName).config</TargetPath>
    </AppConfigWithTargetPath>
</ItemGroup>

次に、ビルドの一部として実際にコピーされます

<Target
    Name="_CopyAppConfigFile"
    Condition=" '@(AppConfigWithTargetPath)' != '' "
    Inputs="@(AppConfigWithTargetPath)"
    Outputs="@(AppConfigWithTargetPath->'$(OutDir)%(TargetPath)')">

    <!--
    Copy the application's .config file, if any.
    Not using SkipUnchangedFiles="true" because the application may want to change
    the app.config and not have an incremental build replace it.
    -->
    <Copy
        SourceFiles="@(AppConfigWithTargetPath)"
        DestinationFiles="@(AppConfigWithTargetPath->'$(OutDir)%(TargetPath)')"
        OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
        Retries="$(CopyRetryCount)"
        RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
        UseHardlinksIfPossible="$(CreateHardLinksForAdditionalFilesIfPossible)"
        >

        <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>

    </Copy>

</Target>
于 2011-05-13T16:17:01.227 に答える
3

app.config用にかなりハードコーディングされていると思います(他の名前のxxx.configを試すことができますが、機能しません)。

ビルド後のイベントがなくても同じ結果を得ることができますが、.log4netファイル用に選択するカスタムツールを使用します。次の例を参照してください。VisualStudio.NET用のコードを生成するためのカスタムツールの作成VisualStudioカスタムツールの開発

于 2011-05-13T15:52:45.973 に答える