Abhängige DLLs von einem NuGet-package nicht kopiert werden, um Ausgabe-Ordner

Ich habe ein Problem mit einer benutzerdefinierten Nuget-Paket habe ich erstellt. Nennen wir es "MyCompany".Bibliothek.nupkg. Es ist gehostet auf einem corporate Artifactory Nuget-repo. Dieses Paket hängt von Newtonsoft.Json. Für einige Grund die abhängige DLL wird nicht in die Ausgabe kopiert Ordner von meinem Projekt, wenn ich mich auf ein Projekt verwendet, das Nuget-Paket. Die seltsame Sache ist, dass, wenn ich ein anderes Paket (z.B. Moq, statt meine eigenen), die abhängigen DLLs kopiert werden.

Habe ich erstellt-test-Lösung um das Problem zu reproduzieren:

Lösung ReferenceTest:

  • Projekt: SomeLib.dll; Referenzen:
    • MyCompany.Bibliothek Nupkg (abhängig von Newtonsoft.Json, so dass auch Hinzugefügt)
    • Moq Nupkg (abhängig von der Burg.Kern, auch Hinzugefügt)
  • Projekt: MyWinFormsApp.exe; Projekt-Referenz:
    • SomeLib.csproj

Wenn ich einen Blick in die Ausgabe-Ordner der SomeLib, sehe ich:

  • SomeLib.dll
  • Moq.dll
  • Castle.Core.dll
  • MyCompany.Library.dll
  • Newtonsoft.Json.dll

Sieht gut aus.

Aber wenn ich mir den output-Ordner von MyWinFormsApp, Newtonsoft.Json.dll fehlt und, wenn die Anwendung ausgeführt wird, wirft es Ausnahmen, dass die Newtonsoft.Json dll nicht gefunden. Jedoch, die Castle.Core.dll IST in der Ausgabe-Ordner MyWinFormsApp.

Habe ich im Vergleich die nuspecs von Moq und MyCompany.Bibliothek, und ich kann nicht wirklich finden kein signifikanter Unterschied.

Ich konnte alle von dem Projekt, dass die Nutzung meiner SomeLib Referenz Newtonsoft.Json, aber das ist eine Menge Projekte, und ich will nicht zu stören, das andere Entwickler mit, dass. Sollten Sie nicht haben, um zu wissen, dass SomeLib verwendet, die Versammlung.

Referenzen in der SomeLib.csproj sind wie diese:

  <ItemGroup>
    <Reference Include="MyCompany.Library, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\packages\MyCompany.Library.1.0.0\lib\net461\MyCompany.Library.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
      <HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Moq, Version=4.5.28.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
      <HintPath>..\packages\Moq.4.5.28\lib\net45\Moq.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.8.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
  </ItemGroup>

Meine Nuspec-Datei sieht wie folgt aus:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>MyCompany.Library</id>
    <version>0.0.0</version>
    <description>MyCompany Core library</description>
    <authors>MyCompany</authors>
    <references>
      <reference file="MyCompany.Library.dll" />
    </references>
    <dependencies>
      <dependency id="Newtonsoft.Json" version="[8.0,9.0.1]" />
    </dependencies>    
  </metadata>
  <files>
    <file src="MyCompany.Library\bin\Release\MyCompany.Library.dll" target="lib\net461"/>
    <file src="MyCompany.Library\bin\Release\MyCompany.Library.pdb" target="lib\net461"/>
    <file src="MyCompany.Library\bin\Release\MyCompany.Library.xml" target="lib\net461"/>
  </files>
</package>

Ich bin mit Visual Studio 2015 Professional.

Meine Fragen:

  1. Warum ist Visual Studio nicht kopieren meine abhängige dll?
  2. Warum ist es kopieren Sie die Abhängigkeiten Moq? Was ist der Unterschied?

Vielen Dank für jede Hilfe.

Quido

BEARBEITEN

Ich habe den Vergleich der NUSPEC-Datei von Moq und mein eigenes Paket und (völlig verzweifelt) ich fand noch einen Unterschied. Die Moq Nuspec-Datei enthält:

<dependencies>
  <group targetFramework=".NETFramework4.5">
    <dependency id="Castle.Core" version="3.3.3" />
  </group>
</dependencies>

und mein eigenes Paket enthält:

<dependencies> 
  <dependency id="Newtonsoft.Json" version="[8.0,9.0.1]" /> 
</dependencies>     

Änderte ich meine Abhängigkeit angeben targetFramework und jetzt VisualStudio FUNKTIONIERT die copy meine Abhängigkeit!

NuSpec-Datei, die ist das einzige, was ich geändert habe und diese wirklich löst. Ich habe schon hin und her, um eine situation mit und ohne targetFramework und die Ergebnisse sind konsistent (das scheitern ohne targetFramework und Erfolg mit der targetFramework).

Also: problem gelöst, aber ich habe keine Ahnung, warum...

  • Die ich gefunden habe, eine weitere Frage zu diesem Thema. stackoverflow.com/questions/1132243/... Es sieht aus wie ein bug in VS / MSBuild. Die akzeptierte Antwort auf das Thema, erklärt es ziemlich gut.
InformationsquelleAutor Quido | 2017-04-06
Schreibe einen Kommentar