我有一个 x86 Visual Studio 解决方案,其中包含许多项目文件。某些 DLL 文件旨在用作用户系统上其他应用程序的插件。
我们正在扩展一些 DLL 文件以支持 64 位应用程序。我想设置解决方案/项目,以便只需点击“构建”即可构建这些 DLL 的 x86 和 x64 版本
文件。该解决方案包含 C++ 和 C# 项目。
我意识到“批量构建”能够构建两者,但如果开发人员可以像以前一样单击相同的按钮并生成所有输出 DLL 文件会更方便。
以下是我尝试对测试项目进行的一些修改,但我还没有开始工作:
我试过修改 <Target Name="AfterBuild">
尝试:
<Target Name="AfterBuild" Condition=" '$(Platform)' == 'x86' ">
<PropertyGroup>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
但这会导致以下错误:
C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(565,5): error MSB4006: There is a circular dependency in the target dependency graph involving target "Build".
我认为我的条件会阻止无限递归,但我理解 MSBuild 怎么看不到它。
我也试过:
<Project DefaultTargets="MyBuild86;MyBuild64" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
...
<Target Name="MyBuild86">
<PropertyGroup>
<Platform>x86</Platform>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
<Target Name="MyBuild64">
<PropertyGroup>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
但是我的
DefaultTargets
似乎在 Visual Studio IDE 中被忽略。最后,我尝试创建一个单独的项目来导入第一个项目:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<OutputPath>..\$(Configuration)\x64\</OutputPath>
<ProjectGuid>{A885CAC3-2BBE-4808-B470-5B8D482CFF0A}</ProjectGuid>
</PropertyGroup>
<Import Project="BuildTest.csproj" />
</Project>
到目前为止,这已显示出最大的希望。但是,Visual Studio 似乎忽略了我的
OutputPath
从这个新项目设置,而是将 EXE/DLL 文件输出到原始项目中指定的路径。没有任何 PropertyGroup
我可以看到正在原始项目中执行的块来覆盖它,所以我不确定发生了什么。
最佳答案
我们做了一些类似于为 .NET Compact Framework 构建核心组件的事情。 .
尝试这个:
<Target Name="AfterBuild">
<MSBuild Condition=" '$(Platform)' == 'x86' " Projects="$(MSBuildProjectFile)" Properties="Platform=x64;PlatFormTarget=x64" RunEachTargetSeparately="true" />
</Target>
关于visual-studio - 如何使用单个 Visual Studio 解决方案同时构建 x86 和 x64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574075/