在我的VS 2017项目中,我引用了docfx.console包,我希望它只在满足特定条件时使用。但是这个包被用于所有的构建。
这是我项目的一部分。我希望在配置是安装程序/AnyCPU并且VS正在构建net40风格时使用net40。
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net40;netstandard1.3;netstandard2.0</TargetFrameworks>
<!-- ... -->
<Configurations>Debug;Release;Installer</Configurations>
</PropertyGroup>
<ItemGroup Condition=" '$(TargetFramework)'=='net40' ">
<!-- ... -->
<PackageReference Include="docfx.console" Version="2.30.0" Condition="'$(Configuration)|$(Platform)'=='Installer|AnyCPU'" />
</ItemGroup>
<!-- ... -->
</Project>是否有一种方法可以在安装程序构建中仅为docfx.console使用net40?
发布于 2020-05-24 19:49:21
甚至我也在寻找基于条件的nuget包引用(只有在DefineConstants中设置了预期常量时才会加载)。虽然@Luke解决方案对我有用,但我可以在没有外部目标文件的情况下使它工作。
解决方案是使用PackageReference选择>时包含
确保在包含PropertyGroup的DefineConstants之后有这个块。
<Choose>
<When Condition="$(DefineConstants.Contains('My_CONST'))">
<ItemGroup>
<PackageReference Include="MyPackage">
<Version>1.0.6</Version>
</PackageReference>
</ItemGroup>
</When> </Choose>发布于 2019-05-07 18:59:25
总之,即使在条件为"false“的情况下,也将导入包。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp3.0;netcoreapp2.2;net472</TargetFrameworks>
<Platforms>x64;x86</Platforms>
</PropertyGroup>
<ItemGroup Condition="false">
<PackageReference Include="MyPackage" Version="1.0.0" />
</ItemGroup>
</Project>我们发现,我们可以通过将packagereference放在另一个文件中并使文件的导入成为条件来解决这个问题。
单独文件: packagerefs.targets
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="MyPackage" Version="1.0.0" />
</ItemGroup>
</Project>项目档案:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp3.0;netcoreapp2.2;net472</TargetFrameworks>
<Platforms>x64;x86</Platforms>
</PropertyGroup>
<Import Project="packagerefs.targets" Condition="false" />
</Project>发布于 2018-02-06 05:53:23
忽略PackageReference条件
这是一个关于新样式csproj PackageReference的PackageReference,用于处理nuget包中的内容/工具文件。
在包docfx.console中,看起来docfx.console有"content“、"build”和"tools“,其中没有.NET代码,只是随机文件:

在这种情况下,当我们安装这个nuget包时,nuget不会做任何事情。所以它似乎被用于所有的构建。因为:
使用NuGet的Packages.config包并不总是在传递的NuGet环境(使用Project.json或PackageReferences的项目)中工作。在传递的NuGet环境中工作的包必须使用"contentFiles“而不是"content”--如果包想在这两种环境中工作,您可以同时使用两者。另外,install.ps1/uninstall.ps1不会在传递的NuGet环境中执行--但是,init.ps1将同时在Packages.config和传递环境中运行。
目前,还没有一个完美的解决方案,因此问题4837仍然是开放的。
要解决此问题,需要将NuGet docfx.console包更改为使用contentFiles并定义目标,并通常通过使用$(MSBuildThisFileDirectory)..\tools\MyTool.exe引用工具。如果将此PackageName.targets文件放入构建目录,它将自动包含到引用NuGet包的项目中。
希望这能有所帮助。
https://stackoverflow.com/questions/48590270
复制相似问题