2017-09-21 3 views
1

Es gibt eine Assembly, die ich in meinem Projekt referenzieren muss, damit die "Interop-Typen einbetten" auf "false" gesetzt wird, um erfolgreich kompiliert zu werden. Wenn ich diese Option nicht setzen erhalte ich die Kompilierung Fehler:Einbetten von Interop-Typen in das NuGet-Paket auf

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. 

Wenn ich einfach waren, um ein Projekt zu haben, würde ich die Option auf false gesetzt und nie Sorgen darüber, aber jetzt, dass ich Wenn ich ein nugget-Paket damit mache, versuche ich einen Weg zu finden, die Option zu setzen, wenn das Paket hinzugefügt wird.

Meine nuspec Datei verfügt derzeit über diesen (ommiting Metadaten):

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

ich an der nuget Dokumentation habe gesucht, aber nicht finden kann, wie dies zu tun. Ist es überhaupt möglich?

Antwort

3

Sie erhalten eine install.ps1 im Verzeichnis wie

Werkzeuge benötigen
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 } 

basiert auf der Frage Can NuGet distribute a COM dll? und es ist answer. Dieser Unterschied besteht darin, dass Sie den Aufruf von regsvr32 nicht benötigen, da Sie nicht versuchen, eine com dll zu verteilen und zu registrieren.

+1

Erstaunlich, obwohl es scheint, dass 'install.ps1' nicht mehr unterstützt wird. Ich habe stattdessen 'init.ps1' verwendet und es in' tools' geschrieben und es hat perfekt funktioniert! –

+0

Gemäß diesem [Problem] (https://github.com/NuGet/Home/issues/4942) scheint die Zukunft der Unterstützung für install.ps1 unsicher zu sein. Wenn Ihr Projekt den PackageReference-Knoten verwendet, wird nur init.ps1 unterstützt. Die Unterstützung des PackageReference-Knotens ist derzeit [eingeschränkt] (https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files) auf einige Projekttypen (.Net Core .Net-Standard und UWP in Visual Studio 2017). – mcdon