Laden...

BadImageFormatException bei der Verwendung eines selbst erstellten Nugetpaketes

Erstellt von Speedys_Work vor 3 Jahren Letzter Beitrag vor 3 Jahren 963 Views
S
Speedys_Work Themenstarter:in
6 Beiträge seit 2020
vor 3 Jahren
BadImageFormatException bei der Verwendung eines selbst erstellten Nugetpaketes

Hallo zusammen,

ich habe folgendes Problem ...

ich bin dabei Nugetpaket zu packen, mit nativen dll's in x86 und x64 und einem C#-Wrapper-Project
für die dlls. Der Teil mit den nativen dll's klappt sehr gut, nur es kommt beim Wrapper-Projekt zu einem Fehler. Dieses Projekt hat die Einstellung AnyCPU.

Wenn ich dieses Nugetpaket verwenden will in der Konfiguration x86, kommt es zu BadImageFormatException, und auch beim Erstellen kommen Warnhinweise, dass es Konflikte bei der Prozessorarchitektur gibt.

Wäre für Tipps sehr dankbar.

Hier noch der Aufbau des Packages:

16.807 Beiträge seit 2008
vor 3 Jahren

Was steht in den Targets?
Darüber wirds eigentlich gesteuert.

Ansonsten bin ich mir nicht sicher, ob die DLLs wirklich unter build liegen dürfen.
Automatismen legen das eigentlich in die Runtimes-Ordner.

S
Speedys_Work Themenstarter:in
6 Beiträge seit 2020
vor 3 Jahren

Vielen Dank für die schnelle Antwort und Tipps,

Wegen der Ordnerstruktur im Paket, die wurde Automatisch so angelegt.
Ich lasse das Paket per Microsoft-TFS-Server erstellen.

Hier ein Auszug meiner Targets-Datei:


<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="CopyPjsua2DllsTarget" AfterTargets="Build">
        <CreateItem Include="$(MSBuildThisFileDirectory)$(PlatformName)\*.dll">
            <Output TaskParameter="Include" ItemName="DependencyAssemblies" />
        </CreateItem>
   
        <Copy Condition="'$(PlatformName)' == 'x64'" SourceFiles="$(MSBuildThisFileDirectory)x64\pjsua2.dll" DestinationFolder="$(OutDir)" />
        <Copy Condition="'$(PlatformName)' == 'x64'" SourceFiles="$(MSBuildThisFileDirectory)x64\libcrypto-1_1-x64.dll" DestinationFolder="$(OutDir)" /> 
        <Copy Condition="'$(PlatformName)' == 'x64'" SourceFiles="$(MSBuildThisFileDirectory)x64\libssl-1_1-x64.dll" DestinationFolder="$(OutDir)" />
        <Copy Condition="'$(PlatformName)' == 'x86'" SourceFiles="$(MSBuildThisFileDirectory)x86\pjsua2.dll" DestinationFolder="$(OutDir)" />
        <Copy Condition="'$(PlatformName)' == 'x86'" SourceFiles="$(MSBuildThisFileDirectory)x86\libcrypto-1_1.dll" DestinationFolder="$(OutDir)" /> 
        <Copy Condition="'$(PlatformName)' == 'x86'" SourceFiles="$(MSBuildThisFileDirectory)x86\libssl-1_1.dll" DestinationFolder="$(OutDir)" />
        
    </Target>
</Project>

16.807 Beiträge seit 2008
vor 3 Jahren

Mit welcher NuGet Version erstellst Du denn das Paket? Mit welcher Version konsumierst Du das Paket?
Wenn Du wirklich von TFS sprichst, dann hoffe ich, dass ihr die NuGet.exe regelmäßig aktualisiert habt..? Ansonsten hat die ja viele Jahre auf dem Buckel...und entsprechend ein altes Schema.

S
Speedys_Work Themenstarter:in
6 Beiträge seit 2020
vor 3 Jahren

Auch ein guter Hinweis, vielen Dank.

Hatte auf dem TFS eingestellt, das er die Version 5.4 runterladen/nutzen soll. Jetzt mal auf 5.5.1 geändert.

Zu dem Teil mit dem Konsumieren, nutze das MS Visual Studio 2019 um zu bauen, da steht
NuGet-Paket-Manager 5.5.0. Sollte aktuell sein.

S
Speedys_Work Themenstarter:in
6 Beiträge seit 2020
vor 3 Jahren

Das mit dem kopieren hat sich erübrigt.