Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何复制NuGet软件包本机库文件?_C#_Nuget_Post Build - Fatal编程技术网

C# 如何复制NuGet软件包本机库文件?

C# 如何复制NuGet软件包本机库文件?,c#,nuget,post-build,C#,Nuget,Post Build,我有一个NuGet包,这个托管库依赖于本机库。 我想将本机依赖项复制到\\UnmanagedLibraries\Windows\x86\文件夹,我已创建了以下文件,并将其复制到生成文件夹: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="CopyNativeReferences"> <Message Text="$(MSBuild

我有一个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包需要复制它们的本机引用。安装第二个包后,第一个包的本机引用不会被复制。似乎“后构建”被新包覆盖了

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


我如何解决这个问题

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

PropertyGroup>
 <AfterBuildDependsOn>
    $(AfterBuildDependsOn);
    CopyNativeReferences;
 </AfterBuildDependsOn>
</PropertyGroup>
PropertyGroup>
$(AfterBuildDependsOn);
复制参考;

更好的方法是使用。我们注意到,我们的目标有时没有被调用,无法复制,但这种情况经常发生,即使在运行之间没有任何变化,您是否遇到过类似的问题?我们有时在构建环境中没有运行它时遇到问题。事实证明,这与我们如何进行包恢复有关。如果使用MSBuild调用下载/还原包,目标文件将不会执行该运行(导入已运行,因此MSBuild不会看到新文件)。我们在调用MSBuild之前添加了一个恢复包的步骤,从而解决了这个问题。新的TFS模板会自动执行此操作,但当时我们使用的是旧模板。