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

Rub*_*ink 28 msbuild 64-bit warnings csc mscorlib

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

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

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

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

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

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

Rol*_*kas 9

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

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

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

只需添加一个标签,如

<Reference Include="System.Data">
    <HintPath>$(MyCustomPath)</HintPath> 
</Reference>
Run Code Online (Sandbox Code Playgroud)

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

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


来自同一博客的另一个有趣的部分:

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


Tod*_* H. 6

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

  • 对我不起作用.我针对.NET框架V4.0,我仍然收到警告. (4认同)
  • +1但是转移到另一个CLR和VS是作弊:P(Serioulsy,感谢花时间回答) (3认同)
  • 这不是任何方式解决问题的方法.它可能对你有用Todd,但很多项目不能简单地改为针对不同的框架. (2认同)