首页 > 其他分享 >VS中.net项目多版本常用配置

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

时间:2023-03-24 17:02:21浏览次数:49  
标签:版本 windows net5.0 System VS 子项目 net Drawing Resources


说明:

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

相关文章

  • .Net 6.0定义全局当前身份缓存对象
    背景:当前身份缓存对象顾名思义就是:当前登录的用户身份对象,那它解决了什么问题呢?其实在我们日常开发过程中经常能用的到几乎是必备的,就比如我给某个表插入数据时......
  • strokeplug.net - vscode
    functiongetWindowByProcessName(pName){if(!pName||pName.lenght<1)return;letwnds=sp.AllApplications();letresult=newArray();for......
  • vscode 配置git 终端
    vscode版本:1.76.2(2023)点击查看版本详细信息版本:1.76.2(usersetup)提交:ee2b180d582a7f601fa6ecfdad8d9fd269ab1884日期:2023-03-14T17:55:54.936ZElectr......
  • 【sklearn版本问题解决】
    一、报错fromsklearn.utils.validationimportcheck_memoryImportError:cannotimportname'check_memory'二、解决1.首先我去看了相关位置的源码发现validation.py里......
  • Winform程序在VS中打包成安装程序(带卸载)
    场景在VS中进行Winform开发时,可以直接在项目上右击选择生成则会在项目的bin目录下直接生成exe等文件,此时将这个文件夹直接整个复制到别的地方就可以运行。但是如果将其做成......
  • vscode设置免密登陆remote-ssh
    确保本机上有ssh,如果没有的话安装一个。在vscode中安装remote-ssh插件,并连接到服务器生成钥匙对在本地使用ssh-keygen来生成私钥-公钥对,注意如果你有多个服务器需要......
  • .Net MVC 实现WebSocket
    WebSocket 1.基于Html5,IIS8.0版本以上,前端代码和服务器都必须支持WebSocket才能使用;2.请求必须以WS:开头下面是后台接收前端websocket申请的方法:///<summary>......
  • C4D 2023.1.3最新版本一键安装永久使用!
    今天给大家带来的是最新版本MAXONCinema4DC4D2023.1.3安装包下载,支持电脑系统Win和Mac!Cinema4D2023为所有Cinema4D用户带来了出色的功能,并整合了整个Maxon家族的......
  • QT中使用QNetworkAccessManager类进行POST数据//京鸿通信科技(深圳)有限公司//155075891
    QT中使用QNetworkAccessManager类进行POST数据QNetworkAccessManager类简介:1QNetworkAccessManager类允许应用程序发送网络请求和接收网络应答。NetworkAccessAPI都......
  • 使用C#&.NET Core编程实现获取所有Windows服务列表及对Windows服务(Windows Service)
    使用C#&.NETCore编程实现获取所有Windows服务列表及对Windows服务(WindowsService)的启动/停止/重启的方法原文链接:https://codedefault.com/p/start-stop-restart-inst......