Nuget包装在VS2017 csproj项目中

时间:2017-11-29 10:32:13

标签: c# .net nuget visual-studio-2017 csproj

我有以下项目结构,包含3个Nuget依赖项:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net45;net46</TargetFrameworks>
    ...
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="NUnit" Version="3.9.0" />
    <PackageReference Include="Selenium.WebDriver" Version="3.7.0" />
    <PackageReference Include="SpecFlow.CustomPlugin" Version="2.2.1" />
  </ItemGroup>

</Project>

VS2017允许开箱即用创建NuGet包真的很酷。

但是,如果我想要包含自定义NuGet引用并且不想包含我现在使用的引用,该怎么办?

<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    ...
    <dependencies>
      <dependency id="SpecFlow" version="2.2.0" />
      <dependency id="NUnit" version="3.0.0" />
      <dependency id="Autofac" version="[3.3.0,3.5.2]" />
      <dependency id="Autofac.Configuration" version="[3.3.0]" />
      <dependency id="Selenium.WebDriver" version="3.0.0" />
    </dependencies>
  </metadata>
</package>

我在这种情况下需要在我的lib上使用 Autofac ,但我不需要它来构建我的lib。 或者我不需要 SpecFlow.CustomPlugin ,项目中的所有依赖项都将使用我的lib,但它需要有一个自己构建。

我认为有一种方法可以将NuSpec文件路径包含到新的csproj中,但我认为所有csproj PropertyGroup 字段都不会被使用。

有什么建议吗?感谢

1 个答案:

答案 0 :(得分:0)

您应该在官方文档之后使用ExcludeAsset属性

https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files

我修改了doc中的例子以符合您的需求。 如果我的更改不正确,您可以更改ExcludeAssets属性。

<ItemGroup>
    <!-- ... -->

    <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
        <ExcludeAssets>build</ExcludeAssets>

    </PackageReference>

    <!-- ... -->
</ItemGroup>

编辑:

我认为你可以尝试类似的东西:

<PackageReference Include="Autofac" Version="3.5.2">
        <ExcludeAssets>build</ExcludeAssets>
  </PackageReference>
<PackageReference Include="Autofac.Configuration" Version="3.3.0">
        <ExcludeAssets>build</ExcludeAssets>
  </PackageReference>

如果我完全理解文档,这将排除用于由nuget包创建以创建依赖项的构建文件夹中的道具和目标