我正在尝试使用 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架构。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top