VS中.net项目多版本常用配置

119 篇文章 5 订阅
116 篇文章 9 订阅

说明:

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!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值