次の方法で共有


-link (Visual Basic)

コンパイラが、指定したアセンブリ内の COM 型情報を、現在コンパイルしているプロジェクトで使用できるようにします。

構文

-link:fileList  

又は

-l:fileList  

論争

任期 定義
fileList 必須。 アセンブリ ファイル名のコンマ区切りリスト。 ファイル名にスペースが含まれている場合は、名前を引用符で囲みます。

注釈

-link オプションを使用すると、型情報が埋め込まれたアプリケーションをデプロイできます。 アプリケーションでは、ランタイム アセンブリへの参照を必要とせずに、埋め込み型情報を実装するランタイム アセンブリで型を使用できます。 ランタイム アセンブリのさまざまなバージョンが発行されている場合、埋め込み型情報を含むアプリケーションは、再コンパイルしなくてもさまざまなバージョンで動作できます。 例については、「 チュートリアル: マネージド アセンブリからの型の埋め込み」を参照してください。

-link オプションの使用は、COM 相互運用機能を使用する場合に特に便利です。 アプリケーションでターゲット コンピューターにプライマリ相互運用機能アセンブリ (PIA) が不要になるように、COM 型を埋め込むことができます。 -link オプションは、参照先の相互運用機能アセンブリの COM 型情報を結果のコンパイル済みコードに埋め込むようコンパイラに指示します。 COM 型は CLSID (GUID) 値によって識別されます。 その結果、同じ CLSID 値を持つ同じ COM 型をインストールしたターゲット コンピューターでアプリケーションを実行できます。 Microsoft Office を自動化するアプリケーションは良い例です。 Office などのアプリケーションは通常、異なるバージョン間で同じ CLSID 値を保持するため、.NET Framework 4 以降がターゲット コンピューターにインストールされていて、参照先の COM 型に含まれるメソッド、プロパティ、またはイベントを使用している限り、アプリケーションは参照先の COM 型を使用できます。

-link オプションは、インターフェイス、構造体、およびデリゲートのみを埋め込みます。 COM クラスの埋め込みはサポートされていません。

コードに埋め込まれた COM 型のインスタンスを作成するときは、適切なインターフェイスを使用してインスタンスを作成する必要があります。 CoClass を使用して埋め込み COM 型のインスタンスを作成しようとすると、エラーが発生します。

Visual Studio で -link オプションを設定するには、アセンブリ参照を追加し、 Embed Interop Types プロパティを true に設定 しますEmbed Interop Types プロパティの既定値は false です

別の COM アセンブリ (アセンブリ B) を参照する COM アセンブリ (アセンブリ A) にリンクする場合は、次のいずれかが当てはまる場合は、アセンブリ B にもリンクする必要があります。

  • アセンブリ A の型は、型から継承するか、アセンブリ B からインターフェイスを実装します。

  • アセンブリ B から戻り値の型またはパラメーター型を持つフィールド、プロパティ、イベント、またはメソッドが呼び出されます。

-libpath を使用して、1 つ以上のアセンブリ参照が配置されているディレクトリを指定します。

参照コンパイラ オプションと同様に、-link コンパイラ オプションでは、頻繁に使用される .NET Framework アセンブリを参照する Vbc.rsp 応答ファイルが使用されます。 コンパイラで Vbc.rsp ファイルを使用しない場合は、 -noconfig コンパイラ オプションを使用します。

-linkの短い形式は-l

ジェネリック型と埋め込み型

以降のセクションでは、相互運用機能型を埋め込むアプリケーションでジェネリック型を使用する場合の制限について説明します。

ジェネリック インターフェイス

相互運用機能アセンブリから埋め込まれたジェネリック インターフェイスは使用できません。 これを次の例に示します。

' The following code causes an error if ISampleInterface is an embedded interop type.
Dim sample As ISampleInterface(Of SampleType)

ジェネリック パラメーターを持つ型

相互運用機能アセンブリから型が埋め込まれているジェネリック パラメーターを持つ型は、その型が外部アセンブリの場合は使用できません。 この制限はインターフェイスには適用されません。 たとえば、Range アセンブリで定義されているMicrosoft.Office.Interop.Excel インターフェイスについて考えてみます。 ライブラリが Microsoft.Office.Interop.Excel アセンブリから相互運用機能型を埋め込み、その型が Range インターフェイスであるパラメーターを持つジェネリック型を返すメソッドを公開する場合、次のコード例に示すように、そのメソッドはジェネリック インターフェイスを返す必要があります。

Imports System.Collections.Generic
Imports Microsoft.Office.Interop.Excel

Class Utility
    ' The following code causes an error when called by a client assembly.
    Public Function GetRange1() As List(Of Range)
End Function

' The following code is valid for calls from a client assembly.
Public Function GetRange2() As IList(Of Range)
    End Function
End Class

次の例では、クライアント コードは、エラーなしで IList ジェネリック インターフェイスを返すメソッドを呼び出すことができます。

Module Client
    Public Sub Main()
        Dim util As New Utility()

        ' The following code causes an error.
        Dim rangeList1 As List(Of Range) = util.GetRange1()

        ' The following code is valid.
        Dim rangeList2 As List(Of Range) = CType(util.GetRange2(), List(Of Range))
    End Sub
End Module

次のコマンド ラインは、ソース ファイルの OfficeApp.vb をコンパイルし、 COMData1.dll および COMData2.dll からアセンブリを参照して、 OfficeApp.exeを生成します。

vbc -link:COMData1.dll,COMData2.dll -out:OfficeApp.exe OfficeApp.vb  

こちらも参照ください