1 回答
TA贡献1877条经验 获得超6个赞
好的,我已经分 3 个步骤解决了这个问题(在搜索了几个小时之后)。
如上所述,.dll
如果项目是在 Windows 上构建(调试/发布),我的要求是将文件复制到输出目录,如果项目是.so
在 Linux 上使用 MonoDevelop 构建(调试/发布),则复制对应的库。
我将库复制到我的项目文件夹中的目录(安全的某个地方),然后
Add Existing Item
在 VS 2017 中使用了--> 选择了所需的库文件 --> 使用Add as Link
而不是Open
(从这里找到)。我需要将它们复制到输出目录,而没有从我将它们添加到项目时继承的文件夹结构,所以我遵循了这个问题的公认答案,并能够指示它在每次构建时复制到输出目录。
现在对于最后一个要求,即根据底层操作系统复制特定文件,我使用了文件中的
Condition
属性。这是我所做的:ItemPropertyGroup
.csproj
.dll
如果基本操作系统是 Windows,我有 1 个要包含在内,如果是.so
linux,则有2 个文件要包含在内,这是我在.csproj
文件中修改的对它们的配置。
<ContentWithTargetPath Include="references\libDependencies\linux64\libcvextern.so" Condition=" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' ">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>libcvextern.so</TargetPath>
</ContentWithTargetPath>
<ContentWithTargetPath Include="references\libDependencies\linux64\libSQLite.Interop.so" Condition=" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' ">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>libSQLite.Interop.so</TargetPath>
</ContentWithTargetPath>
<ContentWithTargetPath Include="references\libDependencies\win64\cvextern.dll" Condition=" '$(OS)' == 'Windows_NT' ">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>cvextern.dll</TargetPath>
</ContentWithTargetPath>
正如预期的那样,从现在开始,每次构建(调试/发布)时,都会将相应的库复制到输出目录中。就这么多了,希望对大家有所帮助。
- 1 回答
- 0 关注
- 200 浏览
添加回答
举报