VSでビルドするときに、出力アセンブリファイル名を変更する方法はありますか?C#出力アセンブリファイル名(csproj)
私は2つ(デバッグ/リリースブランチを含む4つ)の設定が、少し異なる機能を持ち、別々に使用する必要がありますが、同じディレクトリに残す必要があります。したがって、ProjectName.dllとProjectName.Test.dllが最適です。
AssemblyNameパラメータを変更するようアドバイスしないでください(私がSOを見つけて見た唯一のヒント)、それらは同じではありません。 AssemblyNameは、すべてのクラスの完全なクラス名も変更しますが、これは望ましくありません。私はだけをに変更して、ファイル名を変更し、アセンブリ内に何も残さないようにします。
これで、名前を付けてアセンブリをコピーする.csprojにAfterBuildターゲットを追加しましたが、このソリューションは気に入らないのです。それは簡単かもしれませんか?
また、OutputPathをSomeWhere \ ProjectName.Test.dllに設定しようとしました。これは単にProjectName.Test.dllディレクトリを作成し、そこに$(AssemblyName).dllを置きます。
UPD:AssemblyNameの変更が私が望むものではない理由を明確に説明します。 AssemblyNameは、アセンブリ内のすべての型の一部でもあります(型がどこであるかを示すアセンブリを指します)。これは型解決に直接適用されます。 たとえば、ISomeインターフェイスのProgName.dllを参照します。リゾルバはProgName(型のメタデータに設定されている)を見つけようとしますが、ProgNameがないためProgName.Testだけが見つからないため何も見つかりませんでした。それらがすべてAssemblyName ProgName(.Testではない)を持っていると、動作します。もちろん、私は別のファイル名を扱う場合。
UPD2:のAssemblyNameについて言ったとき、私は何を意味するかのより良い説明: 赤マーク見つけようと何アセンブリリゾルバです。両方の構成でのアセンブリでは同じインタフェースが使用されるため、クライアントはアセンブリを探す必要がありません。両方とも同じAssemblyNameである必要がありますが、同じファイル名(同じフォルダに格納される)を持つ必要があります。
- A.DLL
- B.DLL(またはB.Test.dll、構成に応じて)
- C.DLL :
は、私は1つに、いくつかのアセンブリをマージするILRepackを使用しました
AとCの両方がB.dllを参照しています。 B.Test.dllを(AssemblyName "B.Test"で)代わりにマージすると、参照は参照のままになります。 B.dllをマージすると、参照は残っていません(内部のすべてのコード)。だから、AssemblyName "B"を持つためにB.Test.dll(このファイル名で)が必要です。
「AssemblyNameを変更すると完全なクラス名が変更される」ことについて説明できますか? VS(プロジェクト>のプロパティ>アプリケーション>アセンブリ名)または手動でcsproj(AssemblyNameプロパティ)を変更してアセンブリ名を変更すると、既存の名前空間とクラス名は変わりません。また、 "Default namespace"プロパティは変更されません(csprojのRootNamespace)。アセンブリ名が変更されたときにルートネームスペースを同期させる拡張機能がインストールされていますか? –
Luc
名前の変更がすべて必要な場合は、ポストビルドスクリプトを使用することについて、まったく気に入らないものは何ですか? – blins
Luc、[https://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname(v=vs.110).aspx](https://msdn.microsoft.com/en-us/) library/system.type.assemblyqualifiedname(v = vs.110).aspx)完全な型名にはAssemblyNameが含まれ、型はアセンブリを解決するために使用されます(アセンブリは指定された型からアセンブリされます)。 AssemblyNameを変更すると、私にはさまざまな型解決問題が発生しますが、修正することはできますが、回避する方が良いです。 – rattler