Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
630 views
in Technique[技术] by (71.8m points)

.net - NuGet package shows no dependencies?

I try to make a NuGet package from a .NET 4.7.2 class library (VS2017), but the resulting NuGet package surprisingly shows no dependencies (which is an error).

My setup is like this:

  • My class library is .NET Framework 4.7.2
  • My class library uses another NuGet package (that has dependencies).
  • My class library uses packageReferences in .csproj
  • My class library contains a proper .nuspec file
  • I use nuget.exe pack for creating the package

The nuget.exe pack command should automatically fill in the needed dependencies - this also used to be the case earlier (in another project). However, at that time I used packages.config instead of packageReferences with my class library. Does that change anything?

What is going on?

How can I force the system to again include the needed dependencies in my package?

Notes:

  • The package is built by a MSBuild script on our TeamCity build server (without VS2017). It's the build script that calls both "nuget.exe restore" and later "nuget.exe pack" as part of its build logic.

  • MSBuild is version 15.7

  • nuget.exe is version 4.6.2

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

How can I force the system to again include the needed dependencies in my package?

This is a known issue about nuget pack is ignoring dependencies when using PackageReference instead of packages.config.

To resolve this issue, you can use the following workaround, and NuGet team are still actively working on improving this scenario:

To package your C# Class Library which manages your dependencies via PackageReference in the csproj itself,

please add a reference to NuGet.Build.Tasks.Pack ( https://www.nuget.org/packages/NuGet.Build.Tasks.Pack/) and run msbuild /t:pack from the command line.

I have test this workaround, it works fine. To make sure this workaround works fine, we need to pay attention to the following points:

  • Need to add the nuget package NuGet.Build.Tasks.Pack to the project.
  • Need to add properties /p:PackageOutputPath="D:TesterFolder" -p:Authors=tester
  • Use the command msbuild.exe /t:pack, like: msbuild.exe /t:pack "MyTestLibrary.csproj" /p:PackageOutputPath="D:TestFolder" -p:Authors=tester

Besides, if you want to use .nuspec file to create the nuget package, you should use the following .nuspec file:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyTestLibrary</id>
    <version>1.0.0</version>
    <authors>Tester</authors>
    <owners>Tester</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags>Tag1 Tag2</tags>
    <dependencies>
      <group targetFramework=".NETFramework4.7.2">
        <dependency id="Microsoft.Owin" version="4.0.0" exclude="Build,Analyzers" />
      </group>
    </dependencies>
  </metadata>

    <files>
        <file src="binDebugMyTestLibrary.dll" target="lib
et472MyTestLibrary.dll" />
    </files>
</package>

Then we could use nuget.exe pack to create the nuget package. But, using this method, we have to manually fill in the needed dependencies in the .nuspec file.

Hope this helps.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...