我有一个32/64位版本的项目,并且有相应的32/64位依赖项.我希望能够切换配置并使用正确的引用,但我不知道如何告诉Visual Studio使用与体系 struct 相关的依赖项.

也许我做得不对,但我希望能够在配置下拉列表中在x86和x64之间切换,并使引用的DLL具有正确的位.

推荐答案

下面是我在前一个项目中所做的工作,它需要手动编辑.csproj文件.对于不同的二进制文件,您还需要单独的目录,理想情况下它们是彼此的同级文件,并且与您的目标平台同名.

将单个平台的引用添加到项目后,在文本编辑器中打开.csproj.在<Project>元素内的前<ItemGroup>个元素之前,添加以下代码,这将有助于确定您正在哪个平台上运行(和构建).

<!-- 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)$(PROCESSOR_ARCHITECTURE)替换为$(Platform),以仅考虑项目的目标平台
  • 更改平台确定逻辑以适合当前机器,这样就不会构建/引用要在32位平台上执行的64位二进制文件.

我最初是为工作中的一个内部Wiki编写的,但是,如果您对详细的分步说明感兴趣,我已经修改了它并发布了full process to my blog.

.net相关问答推荐

如何从 tshark 的 stderr 捕获实时数据包计数?

EF Core IEntityTypeConfigurations:从数据库提取数据后相关对象为空

NuGet 兼容与计算框架(Xamarin 和 .NET 6)

F#:跨度、提升和底部类型(或缺乏)

IANA 到 Windows 时区映射

如何知道变量是否只是指向另一个对象的pointer或者它是否可以独立存在

双精度的 C++ 和 C# 十六进制值之间的差异

SetupSet() 已过时.代替什么?

如何使用 Moq 为不同的参数设置两次方法

ASP.NET MVC:隐藏字段值不会使用 HtmlHelper.Hidden 呈现

不同命名空间中的部分类

.NET 的 `Array.Sort()` 方法使用的排序算法是稳定的算法吗?

实体框架无法加载指定的元数据资源

什么是 SUT,它来自哪里?

MemoryStream.Close() 或 MemoryStream.Dispose()

确定使用 ContextMenuStrip 的控件

找不到 System.Windows.Media 命名空间?

通过继承扩展枚举

System.Array.CopyTo() 和 System.Array.Clone() 之间的区别

序列化和反序列化 .NET 对象的最快方法