.net MSB3270:处理器体系结构与Fakes框架之间不匹配

.net MSB3270:处理器体系结构与Fakes框架之间不匹配,.net,msbuild,compiler-warnings,microsoft-fakes,.net,Msbuild,Compiler Warnings,Microsoft Fakes,由于我在UnitTest中使用了Fakes框架,因此得到了以下MSBuild警告 警告MSB3270:正在生成的项目的处理器体系结构“MSIL”与引用“DocumentServiceModel”、“x86”的处理器体系结构不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改项目的目标处理器体系结构,以便在项目和引用之间对齐处理器体系结构,或者依赖于与您项目的目标处理器体系结构相匹配的处理器体系结构的引用。[C:\Projekte\XXX\XXX\XXX\Source\Testing\

由于我在UnitTest中使用了Fakes框架,因此得到了以下MSBuild警告

警告MSB3270:正在生成的项目的处理器体系结构“MSIL”与引用“DocumentServiceModel”、“x86”的处理器体系结构不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改项目的目标处理器体系结构,以便在项目和引用之间对齐处理器体系结构,或者依赖于与您项目的目标处理器体系结构相匹配的处理器体系结构的引用。[C:\Projekte\XXX\XXX\XXX\Source\Testing\UT\XXX.UnitTest\obj\Debug\Fakes\ppsm\f.csproj]

解决方案中所有项目的平台目标都设置为x86

如何消除此生成警告

更新1:

我认为问题在于,Fakes框架创建了一个动态项目,其平台目标是“任何CPU”

(C:\Projekte\XXX\XXX\XXX\Source\Testing\UT\XXX.UnitTest\obj\Debug\Fakes\ppsm\f.csproj)

此动态项目引用my projekt中的程序集,该程序集使用平台目标“x86”运行

我不知道如何将动态Fakes项目更改为“x86”

更新2:

我创建了一个示例项目,得到了相同的警告:

Warning 1   There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "MSBErrorTest", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project. [C:\Projekte\MSBErrorTest\UnitTestProject1\obj\Debug\Fakes\msbet\f.csproj] UnitTestProject1
单元测试csproj:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <ProjectGuid>{4B14EC56-DDC7-4A16-92BA-2D2881E695D1}</ProjectGuid>
        <OutputType>Library</OutputType>
        <AppDesignerFolder>Properties</AppDesignerFolder>
        <RootNamespace>UnitTestProject1</RootNamespace>
        <AssemblyName>UnitTestProject1</AssemblyName>
        <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
        <FileAlignment>512</FileAlignment>
        <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
        <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
        <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
        <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
        <IsCodedUITest>False</IsCodedUITest>
        <TestProjectType>UnitTest</TestProjectType>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <DebugSymbols>true</DebugSymbols>
        <DebugType>full</DebugType>
        <Optimize>false</Optimize>
        <OutputPath>bin\Debug\</OutputPath>
        <DefineConstants>DEBUG;TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
        <PlatformTarget>x86</PlatformTarget>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
        <DebugType>pdbonly</DebugType>
        <Optimize>true</Optimize>
        <OutputPath>bin\Release\</OutputPath>
        <DefineConstants>TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
        <PlatformTarget>x86</PlatformTarget>
      </PropertyGroup>
      <ItemGroup>
        <Reference Include="Microsoft.QualityTools.Testing.Fakes, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
        <Reference Include="MSBErrorTest.Fakes">
          <HintPath>FakesAssemblies\MSBErrorTest.Fakes.dll</HintPath>
        </Reference>
        <Reference Include="System" />
      </ItemGroup>
      <Choose>
        <When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
          <ItemGroup>
            <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
          </ItemGroup>
        </When>
        <Otherwise>
          <ItemGroup>
            <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
          </ItemGroup>
        </Otherwise>
      </Choose>
      <ItemGroup>
        <Compile Include="UnitTest1.cs" />
        <Compile Include="Properties\AssemblyInfo.cs" />
      </ItemGroup>
      <ItemGroup>
        <ProjectReference Include="..\MSBErrorTest\MSBErrorTest.csproj">
          <Project>{f1ae6c89-6f6a-404e-b9e2-10ee2f66942f}</Project>
          <Name>MSBErrorTest</Name>
        </ProjectReference>
      </ItemGroup>
      <ItemGroup>
        <Fakes Include="Fakes\MSBErrorTest.fakes" />
      </ItemGroup>
      <Choose>
        <When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
          <ItemGroup>
            <Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
              <Private>False</Private>
            </Reference>
            <Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
              <Private>False</Private>
            </Reference>
            <Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
              <Private>False</Private>
            </Reference>
            <Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
              <Private>False</Private>
            </Reference>
          </ItemGroup>
        </When>
      </Choose>
      <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
      <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
      <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
           Other similar extension points exist, see Microsoft.Common.targets.
      <Target Name="BeforeBuild">
      </Target>
      <Target Name="AfterBuild">
      </Target>
      -->
    </Project>

调试
任意CPU
{4B14EC56-DDC7-4A16-92BA-2D2881E695D1}
图书馆
性质
UnitTestProject1
UnitTestProject1
v4.5
512
{3AC096D0-A1C2-E12C-1390-A8335801FDB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
10
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages
假的
单元测试
真的
满的
假的
bin\Debug\
调试;痕迹
促使
4.
x86
pdbonly
真的
bin\Release\
痕迹
促使
4.
x86
FakesAssemblys\MSBErrorTest.Fakes.dll
{f1ae6c89-6f6a-404e-b9e2-10ee2f66942f}
MSBErrorTest
假的
假的
假的
假的
ClassLib csproj:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{F1AE6C89-6F6A-404E-B9E2-10EE2F66942F}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>MSBErrorTest</RootNamespace>
    <AssemblyName>MSBErrorTest</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>x86</PlatformTarget>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>x86</PlatformTarget>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Class1.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

调试
任意CPU
{F1AE6C89-6F6A-404E-B9E2-10EE2F66942F}
图书馆
性质
MSBErrorTest
MSBErrorTest
v4.5
512
真的
满的
假的
bin\Debug\
调试;痕迹
促使
4.
x86
pdbonly
真的
bin\Release\
痕迹
促使
4.
x86
更新3:

我更改了配置,使其看起来像这样

  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x86\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>

真的
bin\x86\Debug\
调试;痕迹
满的
x86
促使
最小推荐规则集

但我仍然收到警告

您是否使用了第三方库?如果使用它们,请检查它们是否使用与目标处理器相同的x86。 很明显,对于所有引用,目标处理器应该是相同的,而不仅仅是项目的目标

更新:很明显,这个来自微软的家伙也经历了这种情况。您可以尝试使用他的解决方法:

在博客条目中,执行以下操作: 在csproj文件中搜索此“平台目标”,并对其进行编辑以匹配:

<PlatformTarget Condition=" '$(PlatformTarget)' == '' ">x86</PlatformTarget>
x86
如果这能解决你的问题,请告诉我

更新2:根据unittest.csproj和classlib.csproj的源代码,配置仍然基于“AnyCPU”

请看这一行:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

还有这一行:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

这些目标平台也应该设置为使用x86

更简单的方法是通过单击Visual Studio工具栏上“调试”组合框中的“配置管理器…”来设置调试和发布,如下图所示:


我收到了Microsoft对此问题的回复

Visual Studio 2012:

在“Fakes\MSBErrorTestClass.Fakes”文件中创建以下元素 在“Fakes”节点下:


x86
Visual Studio 2013:


此问题已在最新版本(即Visual Studio 2013)中修复,因为我只会在我将只运行单元测试的伪程序集上收到此错误,所以我决定忽略此错误。这可以通过将以下内容添加到Fakes XML中来实现:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="FakedAssemblyName.dll"/>
  <Compilation>
    <Property Name="ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch">None</Property>
  </Compilation>
</Fakes>

没有一个
在project_name.csproj文件中,删除设置processorArchitecture属性的节点。它是一个类似的东西



对于在这里登陆且与“假货”无关的任何人,请检查您的邮件中的警告/错误。幸运的是,我找到了项目不需要的ghost DLL,并将其删除。工作得很好

是的,我们使用第三方库。但他们似乎没事。我一使用Fakes框架它就开始了。没有假货,一切都好!Fake Framework要求您以所有引用为目标来使用x86。你检查过你的第三方库目标吗?我刚刚删除了一个项目的所有第三方库。但是警告仍然存在。您使用的是VS2012测试版还是预览版?如果您正在使用它,请尝试重新安装VS 2012 RTM。我们正在使用VS201