场景:
需要引用一个第三方的native dll库,c语言写的。
通过DllImport属性调用,所以要确保运行目录有该库(假设是a.dll)。
问题:
对于可以添加reference的库,vs编译时会自动将其拷贝到输出目录。
但是原生c库,无法添加引用,所以这样行不通。
那么使用属性里的"Copy if Newer"呢?
还是不行,因为我不想把这个库放在根目录,所以建立了一个dll目录,把库放在目录中,但是这样拷贝的时候,会连同目录结构一起拷贝。
导致程序运行的时候,找不到这个库
结局方法:
参考Stackoverflow上的这个解答 ,编辑csproj文件,找到拷贝对应的配置。
从
<ItemGroup>
<None Include="Dlla.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
修改为
<ItemGroup>
<None Include="Dlla.dll">
<Link>a.dll</Link> <!-- 新增了这一行 -->
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
即可。
吐槽时刻:
对于.net来说,微软的相关文档实在是不怎么友好。
全或许全,但是就像给初学者一本字典一样。
入门教程倒是有,但是也像教了识字就丢出来一本高数课本一样。。