【发布时间】:2020-08-13 17:01:07
【问题描述】:
我有一个 C# 项目,它有两个同名的 C++ .dll 版本,但根据它们的体系结构(32 位或 64 位)不同,它们存储在不同的文件夹中,并且必须具有相同的名称,我想要包含具有该名称的正确文件。
所以计划是在构建时首先检查当前平台,将正确的文件从正确的文件夹(基于平台)复制到项目目录中,然后将该文件作为内容包含到项目中以便可以使用。
<ItemGroup>
<Source32Bit Include="File_32bit\File.dll" />
<Source64Bit Include="File_64bit\File.dll" />
</ItemGroup>
<Target Name="CopyFiles" BeforeTargets="Build" >
<Copy SourceFiles="@(Source32Bit)" DestinationFolder="$(ProjectDir)" Condition=" '$(Platform)' == 'x86' " />
<Copy SourceFiles="@(Source64Bit)" DestinationFolder="$(ProjectDir)" Condition=" '$(Platform)' == 'x64'" />
</Target>
<ItemGroup>
<Content Include="File.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
但如果我运行它,它会在目标“CopyFiles”运行之前尝试执行内容包含,因此它无法在该目录中找到 File.dll。如果我为此内容包含目标并尝试执行 AfterTarget="CopyFiles" 它会抱怨 CopyToOutputDirectory。
我应该如何处理?有任何想法吗?谢谢!
【问题讨论】:
-
不要在VS中编译,而是使用具有更多选项的命令行编译器进行编译。
-
请检查我的回答是否能帮助您解决问题。
标签: c# c++ visual-studio msbuild