开发者社区> xxred0324> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

visual studio单项目一次生成多框架类库、多框架项目合并

简介: 目录 不同平台框架项目使用同一套代码,一次编译生成多个框架类库 需要先了解的东西 分析 添加PropertyGroup 多目标平台 编译符号和输出目录设置 添加依赖 代码文件处理 主副平台项目文件处理 最后 补充 自动生成内部版本号 nuget包相关 不同平台框架项目使用同一套代码,一次编译生成多个框架类库 需要先了解的东西 msbuild .
+关注继续查看

目录

不同平台框架项目使用同一套代码,一次编译生成多个框架类库

需要先了解的东西

  • msbuild
  • .net framework迁移至.net core,或者合并,单个项目编译不同的框架 ——官方文档

分析

  • 使用.NET 可移植性分析器工具分析项目依赖
  • .NET 可移植性分析器工具有关博客
  • 根据分析结果以及建议,到这个网站可以根据fx框架下类型名查找对应的nuget包,来替代不兼容的引用
  • 重新组织项目依赖,整理各个框架公共的代码文件和其他平台不支持的功能的代码文件,必要时可将一个文件分成多个多个文件
  • 由于我这里已经是多个分开的项目,就省了分析代码这一步,直接分析文件应该归属哪些项目,哪些独有的

添加PropertyGroup

多目标平台

   <Project Sdk="Microsoft.NET.Sdk">
        <PropertyGroup>
            <TargetFrameworks>net40;net45;netstandard2.0</TargetFrameworks>
        </PropertyGroup>
    </Project>

编译符号和输出目录设置

  <PropertyGroup Condition="'$(Configuration)|$(Platform)|$(TargetFramework)' == 'Debug|AnyCPU|net45'">
    <OutputPath>..\..\Bin\</OutputPath>
    <DefineConstants>TRACE;DEBUG</DefineConstants>
    <DocumentationFile>..\..\Bin\net45\XCode.xml</DocumentationFile>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)|$(TargetFramework)' == 'Release|AnyCPU|net45'">
    <OutputPath>..\..\Bin\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <DocumentationFile>..\..\Bin\net45\XCode.xml</DocumentationFile>
  </PropertyGroup>
  
    <PropertyGroup Condition="'$(Configuration)|$(Platform)|$(TargetFramework)'=='Debug|AnyCPU|netstandard2.0'">
    <OutputPath>..\..\Bin\</OutputPath>
    <DocumentationFile>..\..\Bin\netstandard2.0\XCode.xml</DocumentationFile>
    <DefineConstants>TRACE;DEBUG;NETSTANDARD2_0;__CORE__</DefineConstants>
  </PropertyGroup>
      <PropertyGroup Condition="'$(Configuration)|$(Platform)|$(TargetFramework)'=='Release|AnyCPU|netstandard2.0'">
    <OutputPath>..\..\Bin\</OutputPath>
    <DocumentationFile>..\..\Bin\netstandard2.0\XCode.xml</DocumentationFile>
    <DefineConstants>TRACE;RELEASE;NETSTANDARD2_0;__CORE__</DefineConstants>
  </PropertyGroup>
  
    <PropertyGroup Condition="'$(Configuration)|$(Platform)|$(TargetFramework)' == 'Debug|AnyCPU|net40'">
    <OutputPath>..\..\Bin\</OutputPath>
    <DefineConstants>TRACE;DEBUG;NET4</DefineConstants>
    <DocumentationFile>..\..\Bin\net40\XCode.xml</DocumentationFile>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)|$(TargetFramework)' == 'Release|AnyCPU|net40'">
    <OutputPath>..\..\Bin\</OutputPath>
    <DefineConstants>TRACE;NET4</DefineConstants>
    <DocumentationFile>..\..\Bin\net40\XCode.xml</DocumentationFile>
  </PropertyGroup>

添加依赖

  <ItemGroup Condition=" '$(TargetFramework)' == 'net45' Or '$(TargetFramework)' == 'netstandard2.0' ">
  </ItemGroup>
  <ItemGroup Condition="'$(TargetFramework)' == 'net45'">
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System" />
    <Reference Include="System.configuration" />
    <Reference Include="System.Data" />
    <Reference Include="System.Management" />
    <Reference Include="System.Security" />
    <Reference Include="System.Web" />
    <Reference Include="System.Web.Extensions" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.XML" />
  </ItemGroup>
  
  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
    <PackageReference Include="Microsoft.AspNetCore.Http" Version="2.0.2" />
    <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.0.2" />
    <PackageReference Include="Microsoft.AspNetCore.Session" Version="2.0.2" />
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Xml" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.0.0" />
    <PackageReference Include="System.Data.Common" Version="4.3.0" />
  </ItemGroup>
  
  <ItemGroup Condition="'$(TargetFramework)' == 'net40'">
     <Reference Include="Microsoft.CSharp" />
    <Reference Include="System" />
    <Reference Include="System.configuration" />
    <Reference Include="System.Data" />
    <Reference Include="System.Management" />
    <Reference Include="System.Security" />
    <Reference Include="System.Web" />
    <Reference Include="System.Web.Extensions" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.XML" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\NewLife.Core\NewLife.Core.csproj">
      <Name>NewLife.Core</Name>
    </ProjectReference>
  </ItemGroup>
  • 如果依赖项那里显示感叹号,关掉项目重新打开即可

代码文件处理

  • 将前面分析好的代码文件分情况做排除,由于项目里面的文件自动显示在解决方案,不用显式包含文件,只需要根据目标平台做好排除即可

主副平台项目文件处理

全部平台都包含

  • MSBuild项目文件会自动包含项目文件下面的所有文件,不必处理

一个或多个平台包含

  • 在所有不包含的此文件的平台的ItemGroup中移除

没有平台包含

  • 没有项目包含此文件为什么还有放在项目文件夹?我也不知道,在全局ItemGroup移除即可

最后

  • 生成看看还有什么错误,看情况解决,比如PropertyGroup设置了文件版本信息,同时引用了/Properties/AssemblyInfo.cs导致报错等等。
  • 合并之前的项目文件
  • 合并之后的项目文件
  • 合并第一个项目的时候,简直一团糟,本来所有项目都不包含的代码都涌进来,有的文件只是一个项目有。合并到第二个,先做好分析,什么文件该引用还是排除,有条理很快就完成,处理好文件引用之后一次性生成成功,没有第一个项目合并的时候一千多个错误

补充

自动生成内部版本号

nuget包相关

用心做好每一件事,结果会给你最大的惊喜!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Visual Studio如何导入码云项目?
Visual Studio如何导入码云项目?
172 0
Visual C++获取程序当前路径
使用第一段代码可以获得应用程序运行时所在目录。但由于在使用Microsoft Visual Studio.NET编译并运行项目时,真正的宿主是IDE,所以当前目录是项目所在目录,并不是DEBUG或者RELEASE目录,这一点需要注意。
1412 0
《Visual Basic 2012入门经典》----1.5 在窗体中添加控件
设置窗体的初始属性后,现在通过在窗体中添加对象来创建用户界面。可置于窗体中的对象被称为控件。有些控件有可见的界面,用户可与之进行交互;而另外一些控件对用户总是不可见的。本示例将使用这两种控件。屏幕的左边是标题为“Toolbox”的竖直选项卡,单击“Toolbox”选项卡显示“Toolbox”窗口以显示最常用的控件;如果有必要,单击“Common Controls”,如图 1.8 所示。
1106 0
visual studio内置“iis”组件提取及二次开发
简介 visual studio安装后会自带小型的“iis”服务器,本文就简单提取一下这个组件,自己做一个小型“iis”服务器吧。先来说用途吧(废话可绕过),比如在服务器上没有安装iis,或者给客户演示asp.net程序,客户机没装iis或者客户的机子装不了iis,或者嫌装iis麻烦,等等,前提下,或者想快速在不打开iis的情况下,通过鼠标右键就能让动态程序就跑起来的情况下,都是很实用的(注意被使用机器必须有net framework环境)。
740 0
+关注
xxred0324
.NET方向程序猿,热爱编程,享受代码之美,坚持与bug抗争
文章
问答
文章排行榜
最热
最新
相关电子书
更多
使用TensorFlow搭建智能开发系统自劢生成App UI代码
立即下载
D2前端工程下一站 IDE
立即下载
Became OpenSource Project——Weex开源经验谈
立即下载