【发布时间】:2020-10-26 11:56:48
【问题描述】:
我正在将 wpf .net 4.7 解决方案迁移到 .net core 3.1 我正在使用 Visual Studio 16.6.3。 wpf 项目使用 .net 核心编译得很好。 但是依赖的 c++/cli 项目无法编译。 我根据这个https://docs.microsoft.com/de-de/dotnet/core/porting/cpp-cli更改了.vcxproject。 vcxproject 现在看起来像:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<ProjectGuid>...</ProjectGuid>
<Keyword></Keyword>
<RootNamespace>XY</RootNamespace>
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<CLRSupport>NetCore</CLRSupport>
<VCToolsVersion>14.26.28801</VCToolsVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\</OutDir>
<IntDir>$(ProjectDir)..\..\tmp\$(ProjectName)\</IntDir>
<EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild>
<IncludePath>$(IncludePath)</IncludePath>
<IgnoreImportLibrary>false</IgnoreImportLibrary>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<!-- <LinkIncremental>false</LinkIncremental> -->
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)..\..\build\</OutDir>
<IntDir>$(ProjectDir)..\..\tmp\$(ProjectName)\</IntDir>
<EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild>
<IncludePath>$(IncludePath)</IncludePath>
<IgnoreImportLibrary>false</IgnoreImportLibrary>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;WIN32;%(PreprocessorDefinitions);WS_CPLUSPLUS</PreprocessorDefinitions>
<ConformanceMode>false</ConformanceMode>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<AdditionalIncludeDirectories></AdditionalIncludeDirectories>
<AdditionalUsingDirectories>
</AdditionalUsingDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<CompileAsManaged>true</CompileAsManaged>
<CallingConvention>
</CallingConvention>
<UndefinePreprocessorDefinitions>
</UndefinePreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<LanguageStandard>stdcpp17</LanguageStandard>
<DiagnosticsFormat>Classic</DiagnosticsFormat>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<AdditionalLibraryDirectories></AdditionalLibraryDirectories>
<AdditionalDependencies>opengl32.lib;glu32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib;gdiplus.lib;d2d1.lib;%(AdditionalDependencies);WebServices.lib</AdditionalDependencies>
<PreventDllBinding>false</PreventDllBinding>
<Profile>false</Profile>
<AdditionalOptions></AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.WindowsDesktop.App" />
</ItemGroup>
...
</Project>
根据上面的链接,系统引用应该被删除并由vs自动加载,因为
<CLRSupport>NetCore</CLRSupport>
但现在以前编译好的 CPP 文件不再编译,出现以下错误
c:\program files\dotnet\packs\microsoft.netcore.app.ref\3.1.0\ref\netcoreapp3.1\mscorlib.dll:致命错误 C1001:内部编译器错误。 (编译器文件“msc1.cpp”,第 1533 行)
即使我添加了最简单的 cpp 文件并通过右键单击编译它也会出现相同的错误,因此它并不真正取决于 cpp 代码
当我将鼠标悬停在编辑器中 CPP 文件的第一个字符上时,它会显示 “系统”未从默认程序集中加载
cli 项目在迁移之前编译良好。
【问题讨论】:
-
您是否也将
<FrameworkReference Include="Microsoft.WindowsDesktop.App.WPF" />添加到项目中,以便能够使用这些程序集? -
@thatguy 是的,已添加
-
也许一旦你需要尝试从构建的输出目录中删除所有项目,清理解决方案并重建解决方案
-
@Dimple Patel 我试过了,但没有成功,只是这个奇怪的编译器错误,即使有详细的日志
-
您是否将每个
CLRSupport更改为NetCore?另外,关闭VS实例,尝试从解决方案文件夹中删除.vs隐藏文件夹,Debug或Release,x64....解决方案文件夹或项目文件夹中的任何输出文件夹,然后重新启动VS到再次测试。
标签: c# c++ visual-studio msbuild