MSBUILD / csc:处理x64 mscorlib警告的最简洁方法1607

时间:2009-08-13 15:31:43

标签: msbuild warnings 64-bit csc mscorlib

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

  

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

删除它的一种方法是使用/nowarn:1607Based on my research,实践中没有问题。如果有人能够遇到他们遇到过的真实问题,请随时回答。

但是,这感觉不对!所以我使用的另一种方法是/nostdlib+,然后将<Reference>与硬编码的<HintPath>一起添加到明确的64位mscorlib中:

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

这有效并且可能更好(除非有人关心指出为什么以前的方法更好),但是有人可以确认这是一件合适的事情,希望能引用一些有意义的东西吗?

4 个答案:

答案 0 :(得分:9)

In this blog我发现一个提案太长,无法完全复制到此处,但简而言之,这个想法可以用this comment改编的摘要来描述:

在项目文件中,您可以在 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中支持这个问题,那么这个问题就不存在了,但在此之前,这将会有效。我使用这种技术在我的调试和放大器中引用相同组件的不同版本。发布版本。效果很棒!

在上面的叙述中,我恢复了在源评论库中丢失的标签,并将措辞改为更加详细。


来自same blog的另一个有趣的部分:

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

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

答案 3 :(得分:0)

就我而言,我收到了这个警告,因为我的解决方案中混合了x86和x64项目。如果我在所有项目中创建x86构建配置,并将其作为构建目标,那么警告就会消失。但是,如果我想要全部定位x64,我相信我必须重建项目(或者按照上面的建议)为x64框架重做它们。

相关问题