在我的VS 2017项目中,我引用了docfx.console包,我希望它仅在满足某些条件时使用。但是包用于所有构建。
这是我项目的一部分。我希望在配置为Installer / AnyCPU并且VS正在构建net40风格时使用docfx.console。
dataframe['name'].value_counts().idxmax()
有没有办法在netler的buildler版本中使用docfx.console?
答案 0 :(得分:7)
即使我一直在寻找基于条件的nuget包(仅当在DefineConstants中设置了预期常数时才加载)。尽管@Luke Schoen Solution为我工作,但我可以在没有外部目标文件的情况下使其工作。
解决方案是使用选择>何时
包含您的PackageReference。确保在具有DefineConstants的PropertyGroup之后具有此块。
<Choose>
<When Condition="$(DefineConstants.Contains('My_CONST'))">
<ItemGroup>
<PackageReference Include="MyPackage">
<Version>1.0.6</Version>
</PackageReference>
</ItemGroup>
</When> </Choose>
答案 1 :(得分:1)
忽略PackageReference条件
这是关于新样式csproj PackageReference的known issue,用于处理nuget包中的content / Tools文件。
在docfx.console
包中,看起来docfx.console
有&#34; content
&#34;,&#34; build
&#34;和&#34; tools
&#34;没有.NET代码,只是随机文件:
在这种情况下,当我们安装这个nuget包时,nuget不会做任何事情。因此它似乎被用于所有构建。那是因为:
使用Packages.config的NuGet包,不要总是在工作 传递NuGet环境(使用Project.json或 PackageReferences)。在传递NuGet中工作的包 环境必须使用&#34; contentFiles&#34;而不是&#34;内容&#34; - 您可以 如果一个包想要在两个环境中工作,那么两者都有。也, install.ps1 / uninstall.ps1不会在传递的NuGet中执行 环境 - 但是,init.ps1将在两个Packages.config中工作 和传递环境。
目前,还没有一个完美的解决方案,所以the issue 4837仍然是开放的。
要解决此问题,需要将NuGet docfx.console
包更改为使用contentFiles并定义目标,并且通常会使用$(MSBuildThisFileDirectory)..\tools\MyTool.exe
引用工具。如果将此PackageName.targets
文件放入构建目录中,它将自动包含在引用NuGet包的项目中。
希望这有帮助。
答案 2 :(得分:1)
总而言之,即使条件为“ 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>
答案 3 :(得分:0)
就我而言,我也遇到了同样的问题 - 但根本原因是执行 nuget 包构建时未定义某些 msbuild 属性 - 特别是未定义 $(SolutionName)
。 Condition
仍然会被评估,只是由于某种原因它返回 true。 (您可以通过输入 Condition="false"
来测试 - 它将被省略)。
我的解决方案是检查是否定义了属性,例如:
<ItemGroup Condition="'$(SolutionName)' != '' and $(SolutionName.Contains('SolutionCustomTag'))">
<Reference Include="...">
第一个语句 '$(SolutionName)' != '' and
- 测试属性是否已定义。