Directory.Build.Props不会覆盖nuget包中的属性

问题描述 投票:0回答:1

我正在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文件中执行的任何操作?

.net nuget-package csproj
1个回答
1
投票
在这种情况下,您可以创建一个Directory.Build.targets文件并覆盖目标:

<Target Name="SpeechPlatformCheck" />

BuildDependsOn属性并非要设置为true / false或任何单独的值,它是要执行的目标的列表。如果要从构建中删除该目标,也可以使用一些字符串替换函数来删除目标(也从Directory.Build.targets文件中删除):

<PropertyGroup> <BuildDependsOn>$(BuildDependsOn.Replace('SpeechPlatformCheck;', '')</BuildDependsOn> </PropertyGroup>

无论哪种方式,都不能保证编译会产生可用的输出(取决于Speech SDK的功能。
© www.soinside.com 2019 - 2024. All rights reserved.