MSBUILD/CSC:处理 x64 mscorlib 警告 1607 的最简洁方法
题
我正在尝试使用 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>
这有效并且可能更好(除非有人愿意指出为什么以前的方法更好的原因),但是有人可以确认这是一个适当的事情,希望引用一些权威的东西吗?
解决方案
我发现通过改变我的项目的目标框架.NET Framework 4中它消除了警告。
其他提示
在该博客我发现,太长,在这里完全复制的建议,但在很短的想法可以改编自的此评论:
在项目文件,则可以定义在的PropertyGroup 作为每个构建配置部自定义变量。例如:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<MyCustomPath>C:\Windows\Microsoft.NET\Framework64</MyCustomPath>
</PropertyGroup>
只需添加一个标记,例如
<Reference Include="System.Data">
<HintPath>$(MyCustomPath)</HintPath>
</Reference>
然后使用宏来定义所述参考路径。 可以定义的 MyCustomPath 以不同的位置对于不同的构建配置(平台和/或调试/释放)。 点击 就不会存在问题,如果微软会支持这个在VS UI,但在那之前,这将工作。我用这个技术来引用不同版本的同一组件在我的调试和发布版本。伟大的作品!的
在上面的叙述我回收这是在源commentarium丢失标记和改变的措辞是稍微更详细的
,点击 从相同博客附加的有趣片一个>:
还有一些其他的方法可以做到这一点,但他们也需要一个手动编辑项目文件。一种方法是指定的PropertyGroup截面条件。这 StackOverflow的问题突出了使用条件。
我相信你的第二个选项(使用/nostdlib+
明确提到)是更好的,因为如果你要引用未在同一平台上的其他组件也不会禁止这种警告。
在我的情况,我有这个警告,因为我在我的解决方案有x86和x64项目的混合。如果我创造我的所有项目x86版本的配置,和目标,对于构建,警告消失。但是,如果我想针对64的一切,我相信我将不得不重建项目(或按照上面的建议)返工他们的x64架构。