MSB3270: несоответствие между архитектурой процессора-Fakes Framework

поскольку я использую Fakes Framework в своем UnitTest, я получаю следующее предупреждение MSBuild.

предупреждение MSB3270: было несоответствие между архитектурой процессора строящегося проекта "MSIL" и архитектурой процессора справочной "DocumentServiceModel", "x86". Это несоответствие может привести к сбоям во время выполнения. Рассмотрите возможность изменения целевой архитектуры процессора проекта с помощью Configuration Manager для выравнивания процессора архитектуры между вашим проектом и ссылками или возьмите зависимость от ссылок с архитектурой процессора, которая соответствует целевой архитектуре процессора вашего проекта. [C:ProjekteXXXXXXXXXSourceTestingUTXXX.UnitTestobjDebugFakesppsmf.csproj]

целевой платформой для всех проектов в решении является x86.

как я могу избавиться от этого предупреждения построить?

обновление 1:

Я думаю, что проблема в том, что фреймворк Fakes создает динамический проект с целевой платформой "любой процессор".

(C:ProjekteXXXXXXXXXSourceTestingUTXXX.UnitTestobjDebugFakesppsmf.csproj)

этот динамический проект ссылается на сборки из моего проекта, который работает с целевой платформой "x86".

Я понятия не имею, как изменить динамический проект подделки на "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:ProjekteMSBErrorTestUnitTestProject1objDebugFakesmsbetf.csproj] UnitTestProject1

UnitTest 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)MicrosoftVisualStudiov$(VisualStudioVersion)</VSToolsPath>
        <ReferencePath>$(ProgramFiles)Common Filesmicrosoft sharedVSTT$(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>binDebug</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>binRelease</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>FakesAssembliesMSBErrorTest.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="PropertiesAssemblyInfo.cs" />
      </ItemGroup>
      <ItemGroup>
        <ProjectReference Include="..MSBErrorTestMSBErrorTest.csproj">
          <Project>{f1ae6c89-6f6a-404e-b9e2-10ee2f66942f}</Project>
          <Name>MSBErrorTest</Name>
        </ProjectReference>
      </ItemGroup>
      <ItemGroup>
        <Fakes Include="FakesMSBErrorTest.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)TeamTestMicrosoft.TestTools.targets" Condition="Exists('$(VSToolsPath)TeamTestMicrosoft.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>

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>binDebug</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>binRelease</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="PropertiesAssemblyInfo.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>

UPDATE3:

Я изменил свою конфигурацию, чтобы выглядеть так.

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

но я все равно получаю предупреждение

4 ответов


У меня есть ответ от Microsoft для этой проблемы

http://connect.microsoft.com/VisualStudio/feedback/details/804933/msb3270-mismatch-between-the-processor-architecture-fakes-framework

Visual Studio 2012:

создайте следующий элемент в "Fakes\MSBErrorTestClass.фейки файл" под узлом "подделки":

<Compilation>
 <Property Name=”PlatformTarget”>x86</Property>
</Compilation>

Visual Studio 2013:

этот проблема была исправлена в последней версии, т. е. Visual Studio 2013


поскольку я получаю эту ошибку только для фальшивых сборок, на которых я буду запускать только модульные тесты, я решил просто игнорировать эту ошибку. Это можно сделать, добавив в фейки XML-код:

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

вы использовали сторонние библиотеки? Если вы используете их, проверьте, используют ли они тот же x86, что и целевой процессор. Понятно, что целевой процессор должен быть одинаковым для всех ссылок, а не только цель вашего проекта.

UPDATE: по-видимому, этот парень из Microsoft также испытывает это. Вы можете попробовать использовать его обходной путь:

http://blogs.msdn.com/b/astebner/archive/2012/05/03/10300809.aspx

от запись в блоге, сделайте это: Ищите это"PlatformTarget" в вашем файле csproj и отредактируйте его в соответствии с этим:

<PlatformTarget Condition=" '$(PlatformTarget)' == '' ">x86</PlatformTarget>

позвольте мне знать, если это решит вашу проблему.

обновление 2: на основе исходного кода unittest.csproj и classlib.csproj, конфигурация по-прежнему основана на "AnyCPU".

пожалуйста, найдите эту строку:

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

а также эта строка:

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

эти целевые платформы также должны быть установлены в использовать x86.

проще всего установить отладку и выпуск, нажав кнопку "Configuration Manager..."в" Debug " combobox на панели инструментов Visual Studio, как на этой грубой иллюстрации:

Visual Studio 2012 Debug/Release


на имя_проекта.csproj файл удалить ItemGroup узел, где установлен атрибут processorArchitecture. Это СТХ как;

<ItemGroup> <Reference ... , processorArchitecture=MSIL"> ... </ItemGroup>

это помогло мне.