Dot-Net

在 Visual Studio 中建構時有條件地使用 32/64 位引用

  • September 30, 2010

我有一個以 32/64 位建構並具有相應 32/64 位依賴項的項目。我希望能夠切換配置並使用正確的參考,但我不知道如何告訴 Visual Studio 使用適合體系結構的依賴項。

也許我的做法是錯誤的,但我希望能夠在配置下拉列表中在 x86 和 x64 之間切換,並讓引用的 DLL 具有正確的位數。

這是我在之前的項目中所做的,這需要手動編輯 .csproj 文件。您還需要為不同的二進製文件提供單獨的目錄,最好是彼此的兄弟,並且與您的目標平台具有相同的名稱。

將單個平台的引用添加到項目後,在文本編輯器中打開 .csproj。在<ItemGroup>元素中的第一個元素之前<Project>,添加以下程式碼,這將有助於確定您在哪個平台上執行(和建構)。

<!-- Properties group for Determining 64bit Architecture -->
<PropertyGroup>
 <CurrentPlatform>x86</CurrentPlatform>
 <CurrentPlatform Condition="'$(PROCESSOR_ARCHITECTURE)'=='AMD64' or '$(PROCESSOR_ARCHITEW6432)'=='AMD64'">AMD64</CurrentPlatform>
</PropertyGroup>

然後,對於您的平台特定參考,您進行如下更改:

<ItemGroup>
 <Reference Include="Leadtools, Version=16.5.0.0, Culture=neutral, PublicKeyToken=9cf889f53ea9b907, processorArchitecture=x86">
   <SpecificVersion>False</SpecificVersion>
   <HintPath>..\..\Lib\Leadtools\$(CurrentPlatform)\Leadtools.dll</HintPath>
 </Reference>
 <Reference Include="Leadtools.Codecs, Version=16.5.0.0, Culture=neutral, PublicKeyToken=9cf889f53ea9b907, processorArchitecture=x86">
   <SpecificVersion>False</SpecificVersion>
   <HintPath>..\..\Lib\Leadtools\$(CurrentPlatform)\Leadtools.Codecs.dll</HintPath>
 </Reference>
 <Reference Include="Leadtools.ImageProcessing.Core, Version=16.5.0.0, Culture=neutral, PublicKeyToken=9cf889f53ea9b907, processorArchitecture=x86">
   <SpecificVersion>False</SpecificVersion>
   <HintPath>..\..\Lib\Leadtools\$(CurrentPlatform)\Leadtools.ImageProcessing.Core.dll</HintPath>
 </Reference>
 <Reference Include="System" />
 <Reference Include="System.Core" />
 <Reference Include="System.Data.Entity" />
 <!--  Other project references -->
</ItemGroup>

注意$(CurrentPlatform)我們上面定義的屬性的使用。相反,您可以對要為哪個平台包含哪些程序集使用條件。您可能還需要:

  • $(PROCESSOR_ARCHITEW6432)and$(PROCESSOR_ARCHITECTURE)替換$(Platform)為僅考慮項目的目標平台
  • 更改平台確定邏輯以適合目前機器,這樣您就不會建構/引用 64 位二進製文件以在 32 位平台上執行。

我最初是為工作中的內部 Wiki 編寫的,但是,如果您對詳細的分步說明感興趣,我已經對其進行了修改並將完整的過程發佈到我的部落格上。

引用自:https://stackoverflow.com/questions/3832552