删除VS 2015中的MSBuild DLL引用,无论版本如何(使用通配符)

本文关键字:版本 通配符 中的 2015 VS MSBuild DLL 引用 删除 | 更新日期: 2023-09-27 18:19:37

在C#项目中,我有一个DLL引用,我想在构建之前删除它(用另一个替换它-这是一个尝试在开发中轻松覆盖NuGet DLL的解决方案(VS 2015))。以下目标似乎有效:

  <Target Name="BeforeBuild">
    <ItemGroup Condition="Exists('..'..'..'Build'My.dll')">
      <Reference Remove="My, Version=1.2.3.4, Culture=neutral, processorArchitecture=MSIL" />
      <Reference Include="My, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
        <SpecificVersion>False</SpecificVersion>
        <HintPath>..'..'..'Build'My.dll</HintPath>
      </Reference>
    </ItemGroup>
  </Target>

这个问题是,我需要指定要删除的DLL的确切版本,它可能会更改。无论版本如何,我都要删除它。我尝试了一个通配符

      <Reference Remove="My, Version=*, Culture=neutral, processorArchitecture=MSIL" />

但这似乎与任何内容都不匹配,因为我得到了error CS1704: An assembly with the same simple name 'My' has already been imported.

删除VS 2015中的MSBuild DLL引用,无论版本如何(使用通配符)

想好了:

<ItemGroup>
  <ReferenceToBeRemoved Include="@(Reference)" Condition="$([System.String]::Copy(&quot;%(Reference.Filename)&quot;).StartsWith('MyDllName'))" />
  <Reference Remove="@(ReferenceToBeRemoved)" />
</ItemGroup>

使用:

<Reference Remove="My, Version=1.2.3.4, Culture=neutral, processorArchitecture=MSIL" >
    <SpecificVersion>False</SpecificVersion>
</ Reference>