将dotnetcore项目迁移到1.0.4

时间:2017-07-04 15:38:27

标签: .net-core visual-studio-2017 msbuild-4.0 dotnet-cli

我一直在尝试在迁移的.net核心项目上运行dotnet build命令(从1.0.0-preview2-003131到1.0.4)。我按照迁移提到的here项目的步骤,使用Visual Studio 2017构建解决方案。但是,使用dotnet CLI命令'dotnet build'会出现以下错误:

  

C:\程序   文件\ DOTNET \ SDK \ 1.0.4 \ Microsoft.Common.CurrentVersion.targets(2867,5):   错误MSB4216:无法运行“GenerateResource”任务,因为   MSBuild无法使用运行时“CLR4”创建或连接到任务主机   和架构“x86”。请确保(1)请求的运行时间   和/或架构在机器上可用,和(2)   必需的可执行文件“C:\ Program Files \ dotnet \ sdk \ 1.0.4 \ MSBuild.exe”   存在并且可以运行。

我之前已经迁移了其他几个服务,在整理了几个软件包依赖项之后,CLI命令运行得很好。我检查了错误中提到的sdk位置,我找不到MSBuild.exe(我确实找到了MSBuild.dll和MsBuild.deps文件)。我需要CLI命令才能用于我的CI / CD设置。任何有关解密和修复此错误的帮助都非常感谢。

系统详细信息:

  1. Visual Studio 2017社区
  2. dotnet --version - > 1.0.4
  3. 我遵循的迁移步骤:

    1. 更改了global.json
    2. 中的sdk版本
    3. 执行dotnet migrate命令
    4. 在VS 2017中打开解决方案并构建它。构建成功。
    5. 编辑:我认为这是一个dotnet核心项目。显然(甚至在运行dotnet migrate命令之前),此解决方案中的一个项目已经针对.Net 4.5.2。相关的.csproj文件如下:

      <?xml version="1.0" encoding="utf-8"?>
      <Project ToolsVersion="14.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>{C092FA80-6783-4282-A3B0-C589FB3027F8}</ProjectGuid>
          <OutputType>WinExe</OutputType>
          <AppDesignerFolder>Properties</AppDesignerFolder>
          <RootNamespace>Siemens.PLM.Teamcenter.DatasetService.PLDrive</RootNamespace>
          <AssemblyName>DatasetService.PLDrive</AssemblyName>
          <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
          <FileAlignment>512</FileAlignment>
          <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
          <WarningLevel>4</WarningLevel>
          <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
          <PublishUrl>publish\</PublishUrl>
          <Install>true</Install>
          <InstallFrom>Disk</InstallFrom>
          <UpdateEnabled>false</UpdateEnabled>
          <UpdateMode>Foreground</UpdateMode>
          <UpdateInterval>7</UpdateInterval>
          <UpdateIntervalUnits>Days</UpdateIntervalUnits>
          <UpdatePeriodically>false</UpdatePeriodically>
          <UpdateRequired>false</UpdateRequired>
          <MapFileExtensions>true</MapFileExtensions>
          <ApplicationRevision>0</ApplicationRevision>
          <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
          <IsWebBootstrapper>false</IsWebBootstrapper>
          <UseApplicationTrust>false</UseApplicationTrust>
          <BootstrapperEnabled>true</BootstrapperEnabled>
          <TargetFrameworkProfile />
        </PropertyGroup>
        <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
          <PlatformTarget>AnyCPU</PlatformTarget>
          <DebugSymbols>true</DebugSymbols>
          <DebugType>full</DebugType>
          <Optimize>false</Optimize>
          <OutputPath>bin\Debug\</OutputPath>
          <DefineConstants>DEBUG;TRACE</DefineConstants>
          <ErrorReport>prompt</ErrorReport>
          <WarningLevel>4</WarningLevel>
        </PropertyGroup>
        <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
          <PlatformTarget>AnyCPU</PlatformTarget>
          <DebugType>pdbonly</DebugType>
          <Optimize>true</Optimize>
          <OutputPath>bin\Release\</OutputPath>
          <DefineConstants>TRACE</DefineConstants>
          <ErrorReport>prompt</ErrorReport>
          <WarningLevel>4</WarningLevel>
        </PropertyGroup>
        <ItemGroup>
          <Reference Include="MimeTypesMap, Version=1.0.1.0, Culture=neutral, PublicKeyToken=1b320cc08ad5aa89, processorArchitecture=MSIL">
            <HintPath>..\..\packages\MimeTypesMap.1.0.1\lib\net451\MimeTypesMap.dll</HintPath>
            <Private>True</Private>
          </Reference>
          <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
            <HintPath>..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
            <Private>True</Private>
          </Reference>
          <Reference Include="System" />
          <Reference Include="System.Data" />
          <Reference Include="System.Windows.Forms" />
          <Reference Include="System.Xml" />
          <Reference Include="Microsoft.CSharp" />
          <Reference Include="System.Core" />
          <Reference Include="System.Xml.Linq" />
          <Reference Include="System.Data.DataSetExtensions" />
          <Reference Include="System.Net.Http" />
          <Reference Include="System.Xaml">
            <RequiredTargetFramework>4.0</RequiredTargetFramework>
          </Reference>
          <Reference Include="WindowsBase" />
          <Reference Include="PresentationCore" />
          <Reference Include="PresentationFramework" />
        </ItemGroup>
        <ItemGroup>
          <ApplicationDefinition Include="App.xaml">
            <Generator>MSBuild:Compile</Generator>
            <SubType>Designer</SubType>
          </ApplicationDefinition>
          <Page Include="AppToolbar.xaml">
            <SubType>Designer</SubType>
            <Generator>MSBuild:Compile</Generator>
          </Page>
          <Page Include="ConsolePage.xaml">
            <SubType>Designer</SubType>
            <Generator>MSBuild:Compile</Generator>
          </Page>
          <Page Include="ListPage.xaml">
            <SubType>Designer</SubType>
            <Generator>MSBuild:Compile</Generator>
          </Page>
          <Page Include="MainPage.xaml">
            <SubType>Designer</SubType>
            <Generator>MSBuild:Compile</Generator>
          </Page>
          <Page Include="MainWindow.xaml">
            <Generator>MSBuild:Compile</Generator>
            <SubType>Designer</SubType>
          </Page>
          <Compile Include="App.xaml.cs">
            <DependentUpon>App.xaml</DependentUpon>
            <SubType>Code</SubType>
          </Compile>
          <Compile Include="AppToolbar.xaml.cs">
            <DependentUpon>AppToolbar.xaml</DependentUpon>
          </Compile>
          <Compile Include="DatasetList.cs" />
          <Compile Include="ListPage.xaml.cs">
            <DependentUpon>ListPage.xaml</DependentUpon>
          </Compile>
          <Compile Include="MessageTypeEnum.cs" />
          <Compile Include="ConsolePage.xaml.cs">
            <DependentUpon>ConsolePage.xaml</DependentUpon>
          </Compile>
          <Compile Include="DatasetService.cs" />
          <Compile Include="FileIndex.cs" />
          <Compile Include="FileWatcher.cs" />
          <Compile Include="MainPage.xaml.cs">
            <DependentUpon>MainPage.xaml</DependentUpon>
          </Compile>
          <Compile Include="MainWindow.xaml.cs">
            <DependentUpon>MainWindow.xaml</DependentUpon>
            <SubType>Code</SubType>
          </Compile>
        </ItemGroup>
        <ItemGroup>
          <Compile Include="MessageListener.cs" />
          <Compile Include="Properties\AssemblyInfo.cs">
            <SubType>Code</SubType>
          </Compile>
          <Compile Include="Properties\Resources.Designer.cs">
            <AutoGen>True</AutoGen>
            <DesignTime>True</DesignTime>
            <DependentUpon>Resources.resx</DependentUpon>
          </Compile>
          <Compile Include="Properties\Settings.Designer.cs">
            <AutoGen>True</AutoGen>
            <DependentUpon>Settings.settings</DependentUpon>
            <DesignTimeSharedInput>True</DesignTimeSharedInput>
          </Compile>
          <EmbeddedResource Include="Properties\Resources.resx">
            <Generator>ResXFileCodeGenerator</Generator>
            <LastGenOutput>Resources.Designer.cs</LastGenOutput>
          </EmbeddedResource>
          <None Include="packages.config" />
          <None Include="Properties\Settings.settings">
            <Generator>SettingsSingleFileGenerator</Generator>
            <LastGenOutput>Settings.Designer.cs</LastGenOutput>
          </None>
          <AppDesigner Include="Properties\" />
        </ItemGroup>
        <ItemGroup>
          <None Include="App.config" />
        </ItemGroup>
        <ItemGroup>
          <BootstrapperPackage Include=".NETFramework,Version=v4.5.2">
            <Visible>False</Visible>
            <ProductName>Microsoft .NET Framework 4.5.2 %28x86 and x64%29</ProductName>
            <Install>true</Install>
          </BootstrapperPackage>
          <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
            <Visible>False</Visible>
            <ProductName>.NET Framework 3.5 SP1</ProductName>
            <Install>false</Install>
          </BootstrapperPackage>
        </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>
      

      原始解决方案编译和构建没有任何问题。我对此有点新意,但我对于如何解决一个针对两个不同的dotnet版本的项目的解决方案(以及为什么在迁移时,构建过程失败)我感到有点困惑。我应该单独运行migrate命令吗? (仅限.xproj项目)?

1 个答案:

答案 0 :(得分:2)

.NET Core CLI中包含的MSBuild的.NET Core构建能够在Windows机器上构建经典项目,只要它们以.NET Framework&gt; = 4.0为目标,安装了引用程序集并且没有特殊功能使用目标/任务。

在您的情况下,您尝试使用与主机MSBuild实例不同的体系结构编译资源。这是在即将推出的2.0工具中开始的基于SDK的项目中解决的问题,但是经典项目依赖于MSBuild来使用不同的CLR启动其他进程 - 这在.NET Core上是不受支持的。

解决它的简单方法是不使用dotnet命令来恢复/构建解决方案,而是使用与Visual Studio一起使用开发人员命令提示符安装的msbuild.exe来使用msbuild等效命令。 (例如=&gt; msbuild /t:Restoremsbuildmsbuild /t:Publish /p:Configuration=Release等。)

另一种解决方法是编辑有问题的csproj文件,将其添加到&#34; old&#34;中的<Project>。项目:

<PropertyGroup Condition="'$(MSBuildRuntimeType)' == 'Core'">
  <GenerateResourceMSBuildArchitecture>CurrentArchitecture</GenerateResourceMSBuildArchitecture>
  <GenerateResourceMSBuildRuntime>CurrentRuntime</GenerateResourceMSBuildRuntime>
</PropertyGroup>

这个问题有issue on MSBuild's GitHub repo