2017-12-20 6 views
0

Ich habe ein C# -Projekt, das ich als .NET Standard 2.0-Bibliothek für andere .NET-Assemblys und als COM-Komponente für nativen Code verwenden möchte. Ich kann das COM-Objekt in Ordnung schaffen, wenn ich den vollen .NET Framework gedacht, aber wenn ich ein neues Projekt Targeting .NET Standard geschaffen, ich habe diesen Fehler, wenn ich es versuchte, registrieren:regasm netstandard DLL

regasm /codebase /tlb MyLib.dll 

RegAsm: Fehler RA0000: Konnte Datei- oder Assembly 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51' oder eine seiner Abhängigkeiten nicht laden. Die angegebene Datei wurde vom System nicht gefunden.

Wie kann ich eine DLL erstellen und registrieren, die sowohl mit .NET Standard als auch mit COM kompatibel ist?

+0

Ich kann das Problem nicht reproduzieren. Wenn ich eine .netstandard ClassLibrary von Grund auf neu erstellen und "C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm classlibrary1.dll/tlb/codebase" ausführen, funktioniert es einwandfrei. Ich habe VS 201715.5.2 (die neueste). –

+1

Regasm.exe sucht im GAC nach abhängigen Assemblys. Stellen Sie sicher, dass es dort ist, ich habe es im Verzeichnis C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ netstandard \ v4.0_2.0.0.0__cc7b13ffcd2ddd51. Aktualisieren Sie ggf. auf .NET 4.7.1. –

Antwort

0

Stellen Sie sicher, dass .NET 4.7.1 installiert ist. Auch dann, da Visual Studio keine NuGet-Pakete in das Ausgabeverzeichnis kopiert, erwarten Sie, dass für einen dieser Fehler der Fehler "Datei oder Assembly nicht laden" angezeigt wird.

Wenn Sie mit einem einzigen Projekt, sondern zwei DLLs leben können, ist dies eine Alternative: In Ihrem CSPROJ, entfernen Sie die TargetFramework Linie und ersetzen Sie es mit mehreren Zielen, je nachdem, was Ihr Code benötigt, zum Beispiel:

<TargetFrameworks>netstandard2.0;net461</TargetFrameworks> 

Verwenden Sie dann die net461-DLL für die Verwendung von COM und den netstandard2.0 für die Verwendung von .NET.

+0

Danke an Hans Passant für den Zeiger auf .NET 4.7.1. –

Verwandte Themen