说明:
1、进行项目多版本配置前,请参阅:.NET、MSBuild 和 Visual Studio 版本控制概述
2、本身不带Form的.Net项目及带Form的.Net项目配置略有不同:
需要使用winform时,使用:<UseWindowsForms>true</UseWindowsForms>
涉及WPF时,使用<UseWPF>True</UseWPF>。
3、报“特性重复”错误时,添加:
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
4、运行时引用资源出错的解决:如果原有项目有资源引用,且命名空间的使用不规范,可能导致运行时引用资源出错,解决方法是:改为正确的命名空间,比如:项目名称.文件夹名称.子文件夹名称(可能有多个).文件名称。
修改*.csproj的内容:
--------本身不带Form的.Net项目,如:类库----------
<TargetFrameworks>netstandard2.0;netstandard2.1;netcoreapp3.1;net5.0;net462;</TargetFrameworks>
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">$(TargetFrameworks);net5.0-windows;net6.0-windows;net7.0-windows;</TargetFrameworks>
<UseWindowsForms Condition="'$(TargetFramework)' == 'net5.0-windows' or '$(TargetFramework)' == 'net6.0-windows' or '$(TargetFramework)' == 'net7.0-windows'">true</UseWindowsForms>
如遇找不到System.Drawing.Region之类的提示,System.Common.Drawing包版本改为5.03或,6.00,7.00的,.csproj配置改为:
<TargetFrameworks>netstandard2.0;netstandard2.1;netcoreapp3.1;net5.0;net462;</TargetFrameworks>
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">$(TargetFrameworks);net5.0-windows;net6.0-windows;</TargetFrameworks>
<UseWindowsForms Condition="'$(TargetFramework)' == 'net5.0-windows' or '$(TargetFramework)' == 'net6.0-windows'">true</UseWindowsForms>
--------带Form的.Net项目:----------
<TargetFrameworks>net462;netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;</TargetFrameworks>
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">$(TargetFrameworks);</TargetFrameworks>
<UseWindowsForms Condition="'$(TargetFramework)' == 'net5.0-windows' or '$(TargetFramework)' == 'net6.0-windows' or '$(TargetFramework)' == 'net7.0-windows'">true</UseWindowsForms>
<OutputType>WinExe</OutputType>
<Nullable>disable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
--------涉及WPF的项目:---------
<TargetFrameworks>net462;netcoreapp3.1;net5.0-windows;net6.0-windows;net7.0-windows;</TargetFrameworks><!--net5.0;net6.0;net7.0;-->
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">$(TargetFrameworks);</TargetFrameworks>
<UseWindowsForms Condition="'$(TargetFramework)' == 'net5.0-windows' or '$(TargetFramework)' == 'net6.0-windows' or '$(TargetFramework)' == 'net7.0-windows'">true</UseWindowsForms>
<UseWPF>True</UseWPF>
<OutputType>Library</OutputType>
<Nullable>disable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
特性重复问题:
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
关于.netstandard版本问题:
输入以下时,可以选择多个.net Standard 版本。
netstandard2,如:
<TargetFramework>netstandard2</TargetFramework>
图形图像方面的引用问题:
1、同时存在于“System.Drawing.Common 和“System.Drawing.Primitives的情况:
升级时加入了这句:<PackageReference Include="Microsoft.Windows.Compatibility" Version="7.0.0" />
隐去即可:<!--<PackageReference Include="Microsoft.Windows.Compatibility" Version="7.0.0" />-->
2、可以针对不同版本引用不同的System.Drawing.Common包,如:
<ItemGroup Condition="'$(TargetFramework)'=='net452' Or '$(TargetFramework)'=='net462' ">
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1' Or '$(TargetFramework)' == 'net5.0'">
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
<PackageReference Include="System.ObjectModel" Version="4.3.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net6.0-windows' Or '$(TargetFramework)' == 'net7.0-windows'">
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
<PackageReference Include="System.ObjectModel" Version="4.3.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' Or '$(TargetFramework)' == 'netstandard2.1'">
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
<PackageReference Include="System.ObjectModel" Version="4.3.0" />
</ItemGroup>
<!-- Mac specific include -->
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp2.1' Or '$(TargetFramework)' == 'netcoreapp3.1' Or '$(TargetFramework)' == 'net5.0'">
<PackageReference Include="runtime.osx.10.10-x64.CoreCompat.System.Drawing" Version="5.8.64" />
</ItemGroup>
如还有问题,则隐去System.Drawing.Common,类似:
<!--<PackageReference Include="System.Drawing.Common" Version="7.0.0" />-->
非字符串资源要求在运行时使用 System.Resources.Extensions 程序集,但未在此项目的引用中找到它。
>>添加System.Resources.Extensions包。
有时,我们可能同时还需要多语言,比如:英文、中文简体、中文繁体、法语、俄语等,此时,需要在原有项目做适当修改。
注:一般情况下原有项目cs代码不用修改!只需要修改csproj项目文件、资源文件及移动部分资源所对应的文件路径。
1、统一项目命名空间。在.csproj中加上:<RootNamespace>$(MSBuildProjectName.Replace(" ", "_"))</RootNamespace>
2、增加两个ItemGroup节,这样可以统一Resources.Designer与Resources.resx的关系:
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
3、将在需要复制的子项目(A)中资源(resx中的XML相关数据节点)复制到另一个子项目(B)的resx文件节点中。
4、将上述第3步中A项目对应的文件(如图片,ico,xml等)复制到B子项目的Resouce文件夹中。
(1)在A中只留下与该A子项目有关的资源及文件。
(2)在B子项目的resx中,将涉及A子项目的资源XML段裁切过去,留下B相关的XML段。
OK,多语言多.Net版本的迁移完成!Good Lucky!
标签:版本,windows,net5.0,System,VS,子项目,net,Drawing,Resources From: https://blog.51cto.com/JohnsonJu/6147460