我正在Visual Studio 2017中开发WinForms应用程序。我有一个nuget包,其中包含一个props文件,如果平台设置为AnyCPU,则会导致编译器错误。但是,有时我想忽略此错误,例如当我使用Visual Designer时,在配置为x64时无法正常工作。 (这是一个众所周知的限制)。
nuget props文件的相关部分是:
<PropertyGroup>
<BuildDependsOn>
SpeechPlatformCheck;
$(BuildDependsOn);
</BuildDependsOn>
</PropertyGroup>
<Target Name="SpeechPlatformCheck">
<Error Condition="'$(Platform.ToLower())' == 'anycpu'" Text="Cognitive Services Speech SDK doesn't support 'Any CPU' as a platform." />
</Target>
我知道这一切都会很好,因为如果我手动编辑nuget props文件,则编译工作正常,并且可以使用Visual Designer。 (当我们实际部署应用程序时,我们切换到x64也可以正常工作)。使用Visual Designer时,这是[[only问题。
我试图通过向我的csproj文件中添加Directory.Build.props文件来覆盖nuget props文件,如下所示。
<?xml version="1.0" encoding="utf-8" ?>
<Project>
<PropertyGroup>
<BuildDependsOn>true</BuildDependsOn>
</PropertyGroup>
</Project>
当前,这不起作用。我肯定知道我的Directory.Build.props文件已包含在编译过程的早期。我尝试了很多排列,将其设置为true / false / empty。我试图查看是否可以覆盖“ SpeechPlatformCheck”目标。一切都无济于事。我的解决方法是破解nuget props文件,我宁愿不这样做。我在这里可以做什么? nuget props文件是否正在最后处理,并且胜过我尝试在自己的props文件中执行的任何操作?
Directory.Build.targets
文件并覆盖目标:<Target Name="SpeechPlatformCheck" />
BuildDependsOn
属性并非要设置为true / false或任何单独的值,它是要执行的目标的列表。如果要从构建中删除该目标,也可以使用一些字符串替换函数来删除目标(也从Directory.Build.targets
文件中删除):
<PropertyGroup> <BuildDependsOn>$(BuildDependsOn.Replace('SpeechPlatformCheck;', '')</BuildDependsOn> </PropertyGroup>
无论哪种方式,都不能保证编译会产生可用的输出(取决于Speech SDK的功能。