【问题标题】:How can I copy the NuGet package native library files?如何复制 NuGet 包本机库文件?
【发布时间】:2014-07-21 23:22:35
【问题描述】:

我有 NuGet 包,其中托管库依赖于本机库。 我想将本机依赖项复制到 \\UnmanagedLibraries\Windows\x86\ 文件夹,并且我制作了以下文件,该文件被复制到构建文件夹:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="CopyNativeReferences">

    <Message Text="$(MSBuildThisFileDirectory) => $(OutDir)\UnmanagedLibraries\Windows\x86\"></Message>    

     <Copy SourceFiles="$(MSBuildThisFileDirectory)..\native\UnmanagedLibraries\Windows\x86\SIMDArrayInstructions.dll" 
      DestinationFolder="$(OutDir)\UnmanagedLibraries\Windows\x86\" 
      SkipUnchangedFiles="true" />

    </Target>

   <PropertyGroup>
     <AfterBuildDependsOn>
        CopyNativeReferences;
     </AfterBuildDependsOn>
    </PropertyGroup>

    <Target Name="AfterBuild" DependsOnTargets="$(AfterBuildDependsOn)"/>
</Project>

一个包运行良好,但我有多个 NuGet 包需要复制它们的本机引用。安装第二个包后,不会复制第一个包的本机引用。 'AfterBuild' 似乎被新包覆盖了。

我还更改了目标名称和 AfterBuildDependsOn 以确保其他包不共享相同的目标变量名称,但这没有帮助。

我该如何解决这个问题?

【问题讨论】:

标签: c# nuget post-build


【解决方案1】:

定义的属性组应如下所示:

PropertyGroup>
 <AfterBuildDependsOn>
    $(AfterBuildDependsOn);
    CopyNativeReferences;
 </AfterBuildDependsOn>
</PropertyGroup>

【讨论】:

  • 我们注意到我们的目标有时没有被调用,无法复制,但它经常发生,即使两次运行之间没有任何变化,你有没有类似的问题?
  • 我们遇到了它有时无法在我们的构建环境中运行的问题。原来这与我们如何进行包恢复有关。如果您使用 MSBuild 调用来下载/恢复包,目标文件将不会执行该运行(导入已经运行,因此 MSBuild 不会看到新文件)。我们通过添加一个步骤以在调用 MSBuild 之前恢复包来解决这个问题。新的 TFS 模板会自动执行此操作,但我们当时使用的是旧模板。
猜你喜欢
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2021-04-26
相关资源
最近更新 更多