.net编译,将文件拷贝到指定目录

场景:
需要引用一个第三方的native dll库,c语言写的。
通过DllImport属性调用,所以要确保运行目录有该库(假设是a.dll)。

问题:
对于可以添加reference的库,vs编译时会自动将其拷贝到输出目录。
但是原生c库,无法添加引用,所以这样行不通。

那么使用属性里的"Copy if Newer"呢?
还是不行,因为我不想把这个库放在根目录,所以建立了一个dll目录,把库放在目录中,但是这样拷贝的时候,会连同目录结构一起拷贝。
导致程序运行的时候,找不到这个库

结局方法:
参考Stackoverflow上的这个解答 ,编辑csproj文件,找到拷贝对应的配置。

  <ItemGroup>
    <None Include="Dll\a.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>

修改为

  <ItemGroup>
    <None Include="Dll\a.dll">
      <Link>a.dll</Link> <!-- 新增了这一行 -->
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>

即可。

吐槽时刻:
对于.net来说,微软的相关文档实在是不怎么友好。
全或许全,但是就像给初学者一本字典一样。
入门教程倒是有,但是也像教了识字就丢出来一本高数课本一样。。

posted @ 2020-03-31 20:56  mosakashaka  阅读(883)  评论(0编辑  收藏  举报