【问题标题】:Is it possible to exclude nuget dependencies for target framework versions above NET40?是否可以排除 NET40 以上目标框架版本的 nuget 依赖项?
【发布时间】:2014-05-21 23:36:22
【问题描述】:

我有一个库,它依赖于几个 Microsoft BCL 库的 NuGet 包,以便使用一些 .NET 4.5 功能但保持与 .NET 4.0 的兼容性。

这里是packages.config的相关部分

<packages>
  <package id="Microsoft.Bcl" version="1.0.19" targetFramework="net40" />
  <package id="Microsoft.Bcl.Async" version="1.0.16" targetFramework="net40" />
  <package id="Microsoft.Bcl.Build" version="1.0.10" targetFramework="net40" />
  <package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" />
</packages>

由于 .NET 4.5 及更高版本不需要这些库,我想排除 .NET 4.0 以上任何内容的依赖项。

如果不维护第二个项目文件,这可能吗?谢谢。

【问题讨论】:

    标签: .net nuget


    【解决方案1】:

    如果您只想拥有一个项目文件,您可以创建多个构建配置并在 csproj 文件中使用 msbuild 条件:

    <ItemGroup Condition="'$(Configuration)' == 'ReleaseNet40'">
      <Reference Include="Microsoft.Threading.Tasks">
        <HintPath>..\packages\Microsoft.Bcl.Async.1.0.16\lib\net40\Microsoft.Threading.Tasks.dll</HintPath>
      </Reference>
    </ItemGroup>
    
    <PropertyGroup Condition="'$(Configuration)' == 'ReleaseNet40'">
      <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(Configuration)' == 'ReleaseNet45'">
      <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    </PropertyGroup>
    

    【讨论】:

    • 这最终不起作用。我可以很好地生成 .dll,但是当我尝试将编译后的 DLL 与 Bcl 依赖项一起使用时,项目说找不到引用的命名空间。 :(
    【解决方案2】:

    http://docs.nuget.org/docs/reference/package-manager-console-powershell-reference

    Install-Package
      -IgnoreDependencies
          Installs only this package and not its dependencies.
    

    【讨论】:

    • 这假定项目除了 Bcl 之外没有其他依赖项。
    猜你喜欢
    • 2020-09-08
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    相关资源
    最近更新 更多