28

我正在尝试使用 VS08SP1 的默认项目系统在显式 x64 模式下调用 C# 编译(不同于AnyCpu)。当我将模块显式标记为 x64 时,我得到:

警告 CS1607:程序集生成 -- 引用的程序集“mscorlib.dll”针对不同的处理器

删除它的一种方法是使用/nowarn:1607. 根据我的研究,这样做在实践中没有问题。如果有人可以突出他们遇到的现实问题,请随时回答。

然而,这感觉不对!所以我使用的另一种方法是这样做/nostdlib+,然后将<Reference>带有硬编码的 a 添加<HintPath>到显式 64 位 mscorlib 中:

<Reference Include="mscorlib">
  <HintPath>$(windir)\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll</HintPath>
</Reference>

这可行并且可能更好(除非有人关心指出以前的方法更好的原因),但是有人可以确认这是一件合适的事情,希望引用一些权威的东西吗?

4

4 回答 4

9

在这个博客中,我发现一个提案太长,无法完全复制到这里,但简而言之,这个想法可以用从这个评论改编的摘要来描述:

在项目文件中,您可以在PropertyGroup部分为每个构建配置定义一个自定义变量。例子:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <MyCustomPath>C:\Windows\Microsoft.NET\Framework64</MyCustomPath>
</PropertyGroup>

只需添加一个标签,例如

<Reference Include="System.Data">
    <HintPath>$(MyCustomPath)</HintPath> 
</Reference>

然后使用宏定义参考路径。您可以针对不同的构建配置(平台和/或调试/发布) 将MyCustomPath定义到不同的位置。
如果 MS 在 VS UI 中支持这一点,问题就不会存在,但在那之前这将起作用。我使用这种技术在我的调试和发布版本中引用相同程序集的不同版本。效果很好!

在上面的背诵中,我恢复了在源评论中丢失的标签,并将措辞更改为更详细一些。


来自同一个博客 的另一篇有趣的文章:

还有其他一些方法可以做到这一点,但它们也需要手动编辑项目文件。一种方法是为 PropertyGroup-sections 指定条件。这个StackOverflow问题强调了条件的使用。

于 2012-02-03T21:03:42.573 回答
6

我发现通过将项目的目标框架更改为 .NET Framework 4,它消除了警告。

于 2011-04-13T17:47:39.923 回答
3

我相信您的第二个选项(使用 显式引用/nostdlib+)更好,因为如果您要引用未在同一平台上构建的其他程序集,它不会抑制此警告。

于 2010-11-03T16:08:09.260 回答
1

就我而言,我收到了这个警告,因为我的解决方案中混合了 x86 和 x64 项目。如果我在所有项目中创建 x86 构建配置,并将其作为构建目标,警告就会消失。但是,如果我想完全针对 x64,我相信我必须重建项目(或遵循上面的建议)才能为 x64 框架重新设计它们。

于 2014-08-29T14:23:50.740 回答