2

VS2010 でバイナリ互換性を使用する方法を教えてもらえますか?

新しいバージョンの新しいアセンブリ ファイルを使用してビルドするたびに、dll の CLSID が変更されるプロジェクトがあります。

WiX パッケージにハードコードされた CLSID を既に使用して、その dll を com+ として登録していますが、ビルドごとに変更する場合は、WiX パッケージを新しいバージョンごとに更新する必要があります。

何か案は ??

編集 1

この CLSID は、コンポーネント サービスで newley に登録された Com+ のプロパティ ウィンドウで、アプリケーション ID と一緒に表示されるものです。インストール時に登録されるように、それらを WiX ファイルにハードコードする必要があります。

編集 2

これは、 WiX - ComPlus アプリケーションの登録とコンポーネントへの役割の割り当てに関する詳細情報を求めていることに関連する別の質問へのリンクです。

4

1 に答える 1

2

MSDNのおかげで解決策を見つけました。

既定では、アセンブリを再構築すると、新しいバージョン番号が割り当てられます。これは、Visual Studio .NET が新しいプロジェクトの AssemblyVersion 属性を "1.0.*" に設定するためです。その結果、アセンブリが再構築されるたびに、サービス対象のコンポーネントに対して新しいクラス識別子 (CLSID) が生成されます。

注: この動作は、C# プロジェクトと Visual Basic .NET プロジェクトでは若干異なります。C# プロジェクトの場合、アセンブリ バージョンは再構築されるたびにインクリメントされます。Visual Basic .NET プロジェクトの場合、アセンブリ バージョンは、プロジェクトが Visual Studio .NET に読み込まれた後、最初に再構築されるときにインクリメントされます。Visual Studio .NET の同じインスタンス内での後続の再構築では、アセンブリのバージョンがインクリメントされません。

アセンブリのバージョンは、厳密な名前を持たないアセンブリのみの情報であるため、これは問題ではありません。厳密な名前のアセンブリの場合は、手動で維持される静的なバージョン番号を使用する必要があります。この問題およびその他のバージョン管理の問題については、第 5 章「ビルド プロセス」の「アセンブリ バージョンの制御」で詳しく説明します。

サービス コンポーネントが COM+ カタログで最終的に使用される CLSID を制御し、開発者がサービス コンポーネントを再構築するたびに複数のバージョンが表示されるのを回避するには、次のいずれかの方法を使用します。

1.次の Guid 属性を使用して、CLSID を明示的に制御します。

[Guid("2136360E-FEBC-475a-95B4-3DDDD586E52A")]
public interface IFoo
{}

[TransactionAttribute(TransactionOption.Required),
Guid("57F01F20-9C0C-4e63-9588-720D5D537E66")]
public class Foo: ServicedComponent, IFoo
{}

2.サービス コンポーネントのアセンブリの静的アセンブリ バージョン番号を維持し、Visual Studio .NET の既定の "1.0.*" バージョン番号スキームを使用しないでください。アセンブリのバージョン管理の詳細については、第 5 章「ビルド プロセス」の「アセンブリ バージョンの制御」を参照してください。

最初の方法を使用しました。御馳走を働いた。

http://msdn.microsoft.com/en-us/library/ee817675.aspx

于 2014-01-14T14:15:07.720 に答える