无法为使用 .targets 文件从 nuget 导入的 dll 设置“始终复制”

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

我有一个通过 nuget 导入到另一个项目的库。但是,在目标项目中,“复制到输出目录”始终设置为“不复制”。即使我之前将其设置为“始终复制”并且进行了更新,也会发生这种情况;它将其重置为“不复制”。我希望它是“始终复制”(或者至少在更新后保留以前的设置)。

为了实现这一目标,我尝试创建一个 .targets 文件,如以下问题所述:

在 nuget 包中将内容文件设置为“复制本地:始终”以及如何在 nuspec 文件中设置“复制到输出目录”属性?

但是,它似乎并不适合我,而且我不确定我的情况是否与这些问题中描述的完全相同。

目标项目的.csproj文件中最终的内容是:

<Content Include="Assets\Devices\MyProj.Devices.Test.NugetTesting.dll" />

而我想要的是

<Content Include="Assets\Devices\MyProj.Devices.Test.NugetTesting.dll">
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>

我的 nuspec 文件是:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <version>$version$</version>
    <authors>komodosp</authors>
    <owners>komodosp</owners>
    <id>MyProj.Devices.Test.NugetTesting.dll</id>
    <title>MyProj.Devices.Test.NugetTesting</title>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Device implementation library for nuget testing</description>
    <copyright>Copyright komodosp 2024</copyright>
    <dependencies>
      <dependency id="MyProj.Devices.Interfaces" version="2.0.*" />
    </dependencies>
  </metadata>
  <files>
    <file src="MyProj.Devices.Test.NugetTesting.targets" target="Build\" />
    <file src="bin\Release\MyProj.Devices.Test.NugetTesting.dll" target="content\Assets\Devices" />
  </files>
</package>

我的目标文件 - 我将其放置在项目目录的“根”目录中(即与 csproj 文件相同的目录)并称为 MyProj.Devices.Test.NugetTesting.targets 是:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="$(ProjectDir)content\Assets\Devices\MyProj.Devices.Test.NugetTesting.dll">
      <Link>MyProj.Devices.Test.NugetTesting.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None> 
  </ItemGroup>
</Project>

(...如上面链接的问题中所述)

另外,如果我想在目标 .csproj 文件中将它作为

<None>
,我不应该使用
<Content>
,我也尝试过这个 .targets 文件:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Content Include="$(ProjectDir)\content\Assets\Devices\MyProj.Devices.Test.NugetTesting.dll">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>

如果我下载 .nupkg 文件并将其解压缩,我可以看到 .targets 文件位于 Build 目录中。但是,在 Visual Studio 中,当我恢复包时,我在输出选项卡的日志中没有看到任何提及 .targets 文件的内容(不确定是否应该有),所以我什至不知道它是否正在查找

最后,dll 始终更新到正确的位置,但“复制到输出目录”设置为“不复制”。

c# .net visual-studio nuget
1个回答
0
投票

原来我一直误解了 .targets 文件如何导入到客户端项目中。

它不会导致项目本身更新,因此在 Visual Studio 中查看时,该属性不会反映新设置并保持“不复制”状态。

但是,由于 .targets 文件是通过自动添加的

<Import>
标签导入到 .csproj 中的,因此该文件最终仍会被复制到构建输出。

郑重声明,我的 .targets 文件中也存在一个错误 - 这是我最终使用并工作的文件。 (即文件路径中不需要“内容”)

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Content Include="$(ProjectDir)\Assets\Devices\MyProj.Devices.Test.NugetTesting.dll">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>

感谢马丁·克里斯蒂安森对这个答案的评论

© www.soinside.com 2019 - 2024. All rights reserved.