2011-08-02 11 views
1

したがって、デバッグモードでビルドするときにアセンブリ名に "d"私の知る限りは、C#でこれを行うための標準的な方法を伝えることができるよう、次に.csprojファイルを編集して置くことです:条件付きAssemblyNameにより、 "Debug"/"Release"以外の名前を使用するとC#プロジェクトが常に再構築されます

所望の効果を有するが、今くそプロジェクトは常に出力を再構築
<PropertyGroup> 
    <AssemblyName Condition="'$(Configuration)' == 'V90 Debug'">$(AssemblyName)d</AssemblyName> 
</PropertyGroup> 

。 DLLに依存する他のプロジェクトの再リンクなどを引き起こします。この変更がなければ、このような問題はありません。

これまでのところ、プロジェクト出力の冗長性を高めることは役に立たなかった。

編集:「V90リリース」、「V90デバッグ」、「V100リリース」などの名前を使用していますが、私たちの設定では、さまざまなバージョンのビジュアルStudioランタイム私は、標準の構成名でテストアプリケーションを書いたが、私の問題はその場合には起こらないことがわかった。

+2

なぜ非標準的なことをしていますか? (あなたがしていることを行うための「標準的な」方法はありません)。 – Oded

+0

まあ、StackOverflowの受け入れられた答えであるという意味で標準です:http://stackoverflow.com/questions/2855629/c-vs-net-change-name-of-exe-depend-on-conditional-compilation-シンボル。私はこの方法でやっています。なぜなら、デバッグとリリースのDLLは、名前の衝突なしに同じディレクトリに共存することができるからです。 –

+1

@ Nathanなぜあなたはそれらを同じディレクトリに存在させたいのですか? Debug \ Release \ Whateverディレクトリを持つのは、*非常に*標準です。 –

答えて

3

C/C++開発では古い標準を使用しています。マネージコードとの大きな違いは、リンカーがないことです。リリースビルドのライブラリの非dバージョンであるDebugビルドで、ライブラリの "d"バージョンを使用するようにリンカを設定しました。そのメカニズムは.NETでは完全に存在しません。ライブラリのコードは実行時に動的にリンクされます。異なるビルドのために異なる名前を持つことを実際には劇的に少なくします。

この古い戦略を実行する場合に発生する問題の1つは、プロジェクトの参照アセンブリに追加の問題があることです。異なる構成で異なる名前を使用するための適切な方法はありません。依存するアセンブリは、プロジェクトの「参照」ノードにリストされています。これは、構成に依存しないプロジェクトのプロパティです。それは不可能ではありません、参照アセンブリの名前を変更する多くのConditionハックが必要になります。ビルドの依存関係のチェックにもこの影響があります。

これは実際には必要ではありませんが、アセンブリのデバッグとリリースのビルドは同じメタデータを持ちます。しかし、それをスキップすると、実行時に問題が発生します。 CLRは間違ったアセンブリ名を使用するように指示されます。それを回避することは、アセンブリをサブディレクトリに隠し、AppDomain.AssemblyResolveイベントを使用して正しいものをロードすることによって、技術的に可能です。アセンブリの名前を変更してこのディレクトリにコピーするには、ビルド後のイベントが必要です。これらのアセンブリが他のアセンブリに依存していると、これは急いで醜いものになります。

短い話ですが、あなたの以前の標準はマネージコードのための良いものではありません。

関連する問題