2017-11-27 3 views
0

Ok mein Problem ist einfach, aber ich kann es nicht herausgefunden.Nuget - LNK2019 bei der Verwendung eines meiner Projekte, die auf ein Paket nuget

In einer einzigen Lösung habe ich ein Projekt (Application exe), das auf eine andere (lib) verweist. Diese Bibliothek verweist auf ein nugget-Paket, z. B. CxImage.

.targets

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemDefinitionGroup> 
    <ClCompile> 
     <AdditionalIncludeDirectories>"$(MSBuildThisFileDirectory)include";%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> 
     <!-- patch --> 
     <AdditionalIncludeDirectories>"$(MSBuildThisFileDirectory)include\cximage";%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> 
    </ClCompile> 
    </ItemDefinitionGroup> 
    <ItemDefinitionGroup Condition="$(Configuration.ToLower().StartsWith('release')) And '$(Platform.ToLower())'=='x64'"> 
    <Lib> 
     <AdditionalLibraryDirectories>"$(MSBuildThisFileDirectory)lib\x64";%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> 
    </Lib> 
    <Link> 
     <AdditionalDependencies>CxImage.lib;jpeg.lib;png.lib;tiff.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies> 
     <AdditionalLibraryDirectories>"$(MSBuildThisFileDirectory)lib\x64";%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> 
    </Link> 
    </ItemDefinitionGroup> 
    <ItemDefinitionGroup Condition="$(Configuration.ToLower().StartsWith('debug')) And '$(Platform.ToLower())'=='x64'"> 
    <Lib> 
     <AdditionalLibraryDirectories>"$(MSBuildThisFileDirectory)lib\x64";%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> 
    </Lib> 
    <Link> 
     <AdditionalDependencies>CxImage_d.lib;jpeg_d.lib;png_d.lib;tiff_d.lib;zlib_d.lib;%(AdditionalDependencies)</AdditionalDependencies> 
     <AdditionalLibraryDirectories>"$(MSBuildThisFileDirectory)lib\x64";%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> 
    </Link> 
    </ItemDefinitionGroup> 
    <ItemDefinitionGroup Condition="$(Configuration.ToLower().StartsWith('release')) And '$(Platform.ToLower())'=='win32'"> 
    <Lib> 
     <AdditionalLibraryDirectories>"$(MSBuildThisFileDirectory)lib\x86";%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> 
    </Lib> 
    <Link> 
     <AdditionalDependencies>CxImage.lib;jpeg.lib;png.lib;tiff.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies> 
     <AdditionalLibraryDirectories>"$(MSBuildThisFileDirectory)lib\x86";%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> 
    </Link> 
    </ItemDefinitionGroup> 
    <ItemDefinitionGroup Condition="$(Configuration.ToLower().StartsWith('debug')) And '$(Platform.ToLower())'=='win32'"> 
    <Lib> 
     <AdditionalLibraryDirectories>"$(MSBuildThisFileDirectory)lib\x86";%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> 
    </Lib> 
    <Link> 
     <AdditionalDependencies>CxImage_d.lib;jpeg_d.lib;png_d.lib;tiff_d.lib;zlib_d.lib;%(AdditionalDependencies)</AdditionalDependencies> 
     <AdditionalLibraryDirectories>"$(MSBuildThisFileDirectory)lib\x86";%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> 
    </Link> 
    </ItemDefinitionGroup> 
    <ItemGroup /> 
</Project> 

Wenn das andere Projekt aufzubauen, die diese lib verweist, kommt es zu einem LNK2019 nicht aufgelöstes externes Symbol "public: __thiscall CxImage :: CxImage (unsigned int)" (?? 0CxImage @@ QAE @ I @ Z) referenziert in Funktion

Bedeutet, dass es lib Datei von CxImage nicht finden kann.

Ich fand einen Weg, um das Problem zu beheben, aber ich denke nicht, dass es richtig ist. In den Eigenschaften der Lib in anderen Anwendungen verwendet, in Librarian> General> Additional Dependencies, fügte ich cxImage lib. Ich dachte, dass die erste Idee hinter nuget-Paket war, diese Art von Sache so zu vermeiden ...

** es ist nicht mit cxImage verwandt, das Problem tritt in jedem anderen Fall auf. Ich erwähnte gerade dieses zum Beispiel

Irgendeine Idee ?? ^^

Antwort

0

Nuget - LNK2019, wenn man von meinem Projekt verwenden, die

Sie zu einem nuget Paket verbindet auch das nuget Paket CxImage zum Referenzprojekt hinzufügen sollen.

Das Projekt verweist auf die lib und den lib Referenzen das nuget Paket CxImage, so dass das Projekt nicht das nuget Paket CxImage direkt verweisen, Visual Studio/MSBuild versucht, schlau zu sein und Verweise nur lib über eher in Projekt bringen als Add nuget Pakets CxImage projizieren. Da Visual Studio/MSBuild die indirekte Referenz CxImage nicht kennt, ob vom Projekt erforderlich oder nicht. Daher fügt Visual Studio/MSBuild das nuget-Paket nicht dem Referenzprojekt hinzu, um eine Referenzbelastung des Projekts zu vermeiden. Sie können sich auf die similar issue für detaillierte Informationen beziehen.

In diesem Fall erhalten Sie diesen Fehler "kann lib Datei von CxImage nicht finden". Um dieses Problem zu lösen, sollten Sie auch das nuget-Paket CxImage zum Referenzprojekt hinzufügen, damit das projest direkt auf das nugget-Paket CxImage verweist.