2017-09-21 2 views
1

プロジェクトで参照する必要があるアセンブリがあります。正常にコンパイルするには、「Interop型の埋め込み」をfalseに設定する必要があります。私は、このオプションを入れない場合は、私は、コンパイル時のエラーを取得:NuGetパッケージでInterop型をfalseに埋め込む

A reference was created to embedded interop assembly 'Interop.MSTSCLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because of an indirect reference to that assembly created by assembly 'AxInterop.MSTSCLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Consider changing the 'Embed Interop Types' property on either assembly. 

私は単にプロジェクトを持っているとしたら、私はfalseにオプションを設定し、決してそれを心配、今、私は「ことでしょう私はそれを使ってナゲットパッケージを作っています。パッケージが追加されたときに、というオプションを設定する方法を見つけようとしています。

私nuspecファイルは、現在、この(ommitingメタデータ)を持っている:私はnugetのドキュメントを見てきましたが、これを行う方法を見つけることができませんでした

<files> 
    <file src="Interop.MSTSCLib.dll" target="lib\net40" /> 
    <file src="AxInterop.MSTSCLib.dll" target="lib\net40" /> 
</files> 

。それも可能ですか?

答えて

3

あなたは質問Can NuGet distribute a COM dll?に基づいて

param($installPath, $toolsPath, $package, $project) 

$project.Object.References | Where-Object { $_.Name -eq "Interop.MSTSCLib" } | ForEach-Object { $_.EmbedInteropTypes = $false } 
$project.Object.References | Where-Object { $_.Name -eq "AxInterop.MSTSCLib" } | ForEach-Object { $_.EmbedInteropTypes = $false } 

のようなツールのディレクトリにinstall.ps1をする必要がありますし、それがanswerです。この相違点は、com.dllを配布して登録しようとしていないので、regsvr32を呼び出す必要はないということです。

+1

驚くべきことですが、 'install.ps1'はサポートされなくなりました。代わりに 'init.ps1'を' tools'に入れて、それは完璧に機能しました! –

+0

この[issue](https://github.com/NuGet/Home/issues/4942)によると、install.ps1のサポートの将来は不確実なようです。プロジェクトでPackageReferenceノードが使用されている場合は、init.ps1だけがサポートされます。 PackageReferenceノードのサポートは、現在いくつかのプロジェクトタイプ(.Net Core)に限定されています(https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files)。 、.Net Standard、およびUWP)をサポートしています。 – mcdon

関連する問題