内容简介:====================www.ayjs.net 杨洋 wpfui.com ayui ay aaronyang=======请不要转载谢谢了。=========创建1个标准类库
====================www.ayjs.net 杨洋 wpfui.com ayui ay aaronyang=======请不要转载谢谢了。=========
创建1个标准类库
我们一开始写了2个,那如果还有4.0,3.5就不方便了
标准库有个依赖项
右击编辑
修改如下
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net20;net35;net40;net45;net46;netstandard1.4;netstandard2.0</TargetFrameworks>
</PropertyGroup>
</Project>
我们拷贝Common.cs文件
因为支持了2.0Framework ,他不支持LINQ的,所有有些代码就有约束了。
你可以在csproj,自己控制,下面是参考的,条件方式的引用
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net20|AnyCPU'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net20'">
<PackageReference Include="NUnit.System.Linq" Version="0.6.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="Microsoft.Win32.Registry" Version="4.4.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.4'">
<PackageReference Include="System.Reflection.TypeExtensions" Version="4.4.0" PrivateAssets="compile" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'">
<Reference Include="System.Web" />
<Reference Include="System.Windows.Forms" />
<Reference Include="WindowsBase" Condition="'$(TargetFramework)' != 'net20'" />
</ItemGroup>
在写代码如果想支持多种,使用预处理器,下面是参考的 #if NET45啥的
#if DEBUG
#if NET45
[assembly: AssemblyConfiguration(".NET Framework 4.5 Debug")]
#elif NET40
[assembly: AssemblyConfiguration(".NET Framework 4.0 Debug")]
#elif NET35
[assembly: AssemblyConfiguration(".NET Framework 3.5 Debug")]
#elif NET20
[assembly: AssemblyConfiguration(".NET Framework 2.0 Debug")]
#elif NETSTANDARD1_4
[assembly: AssemblyConfiguration(".NET Standard 1.4 Debug")]
#elif NETSTANDARD2_0
[assembly: AssemblyConfiguration(".NET Standard 2.0 Debug")]
#elif NETCOREAPP1_1
[assembly: AssemblyConfiguration(".NET Core 1.1 Debug")]
#elif NETCOREAPP2_0
[assembly: AssemblyConfiguration(".NET Core 2.0 Debug")]
#else
#error Missing AssemblyConfiguration attribute for this target.
#endif
#else
#if NET45
[assembly: AssemblyConfiguration(".NET Framework 4.5")]
#elif NET40
[assembly: AssemblyConfiguration(".NET Framework 4.0")]
#elif NET35
[assembly: AssemblyConfiguration(".NET Framework 3.5")]
#elif NET20
[assembly: AssemblyConfiguration(".NET Framework 2.0")]
#elif NETSTANDARD1_4
[assembly: AssemblyConfiguration(".NET Standard 1.4")]
#elif NETSTANDARD2_0
[assembly: AssemblyConfiguration(".NET Standard 2.0")]
#elif NETCOREAPP1_1
[assembly: AssemblyConfiguration(".NET Core 1.1")]
#elif NETCOREAPP2_0
[assembly: AssemblyConfiguration(".NET Core 2.0")]
#else
#error Missing AssemblyConfiguration attribute for this target.
#endif
#endif
生成项目
我还看到一些程序集的知识点
当你的项目有很多 类库,当然你不能维护很多项目的Assembly的程序集的信息,统一版本啊,公司名称等很多信息,我的AYUI 7个类库,就遇到这种需求了。
当然我可以新建一个项目,使用 assembly 文件添加为链接的方式,这样只需要维护1个了。
每次下载Github上的项目看
会有个这种东西,不管这个
一个标准的程序集信息,外层有个文件,他不属于任何csproj,和上面我们说新建1个类库放共用文件的区别 CommonAssemblyInfo.cs 这里我拿NUnit架构讲的。
当然这个文件和snk强命名秘钥
然后项目都是添加为链接方式
我在项目新增了Assembly文件夹,放入了
属性中,创建1个资源,为了创建一个Properties文件夹,然后删除Resources.resx因为我用不上
然后添加文件链接引用这2个,然后新建一个类AssemblyInfo.cs
然后
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
//[assembly: InternalsVisibleTo("nunit.framework.tests, PublicKey=002400000480000094" +
// "000000060200000024000052534131000400000100010031eea" +
// "370b1984bfa6d1ea760e1ca6065cee41a1a279ca234933fe977" +
// "a096222c0e14f9e5a17d5689305c6d7f1206a85a53c48ca0100" +
// "80799d6eeef61c98abd18767827dc05daea6b6fbd2e868410d9" +
// "bee5e972a004ddd692dec8fa404ba4591e847a8cf35de21c2d3" +
// "723bc8d775a66b594adeb967537729fe2a446b548cd57a6")]
#if NET45
[assembly: AssemblyTitle("AY Framework (.NET Framework 4.5)")]
#elif NET40
[assembly: AssemblyTitle("AY Framework (.NET Framework 4.0)")]
#elif NET35
[assembly: AssemblyTitle("AY Framework (.NET Framework 3.5)")]
#elif NET20
[assembly: AssemblyTitle("AY Framework (.NET Framework 2.0)")]
#elif NETSTANDARD1_4
[assembly: AssemblyTitle("AY Framework (.NET Standard 1.4)")]
#elif NETSTANDARD2_0
[assembly: AssemblyTitle("AY Framework (.NET Standard 2.0)")]
#else
#error Missing AssemblyTitle attribute for this target.
#endif
[assembly: AssemblyDescription("")]
[assembly: AssemblyCulture("")]
[assembly: CLSCompliant(true)]
[assembly: AllowPartiallyTrustedCallers]
百度原因
.NET Core/Standard 2.0 推荐在项目属性的“Package”页配置程序集的 版本、描述 等信息。
编译时,会自动根据“Package”页的配置,生成 “ <项目名> .AssemblyInfo.cs”。其中便使用了 AssemblyFileVersionAttribute 等特性。
我们的 AssemblyInfo.cs 中也使用 AssemblyFileVersionAttribute 等特性。因为 AssemblyFileVersionAttribute 等特性是不允许重复,于是便报出CS0579错误了。
修改csproj
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
也可以单独控制
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
AssemblyInfo.cs代码
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
//[assembly: InternalsVisibleTo("nunit.framework.tests, PublicKey=002400000480000094" +
// "000000060200000024000052534131000400000100010031eea" +
// "370b1984bfa6d1ea760e1ca6065cee41a1a279ca234933fe977" +
// "a096222c0e14f9e5a17d5689305c6d7f1206a85a53c48ca0100" +
// "80799d6eeef61c98abd18767827dc05daea6b6fbd2e868410d9" +
// "bee5e972a004ddd692dec8fa404ba4591e847a8cf35de21c2d3" +
// "723bc8d775a66b594adeb967537729fe2a446b548cd57a6")]
#if NET46
[assembly: AssemblyTitle("AY Framework (.NET Framework 4.6)")]
#elif NET45
[assembly: AssemblyTitle("AY Framework (.NET Framework 4.5)")]
#elif NET40
[assembly: AssemblyTitle("AY Framework (.NET Framework 4.0)")]
#elif NET35
[assembly: AssemblyTitle("AY Framework (.NET Framework 3.5)")]
#elif NET20
[assembly: AssemblyTitle("AY Framework (.NET Framework 2.0)")]
#elif NETSTANDARD1_4
[assembly: AssemblyTitle("AY Framework (.NET Standard 1.4)")]
#elif NETSTANDARD2_0
[assembly: AssemblyTitle("AY Framework (.NET Standard 2.0)")]
#else
#error Missing AssemblyTitle attribute for this target.
#endif
[assembly: AssemblyDescription("")]
[assembly: AssemblyCulture("")]
[assembly: CLSCompliant(true)]
[assembly: AllowPartiallyTrustedCallers]
CommonAssemblyInfo.cs
using System.Reflection;
//
// Common Information for the NUnit assemblies
//
[assembly: AssemblyCompany("AY Software")]
[assembly: AssemblyProduct("AYUI X")]
[assembly: AssemblyCopyright("Copyright (c) 2019 AY")]
[assembly: AssemblyTrademark("AYUI is a MVC framework of WPF Tech.")]
#if DEBUG
#if NET46
[assembly: AssemblyConfiguration(".NET Framework 4.6 Debug")]
#elif NET45
[assembly: AssemblyConfiguration(".NET Framework 4.5 Debug")]
#elif NET40
[assembly: AssemblyConfiguration(".NET Framework 4.0 Debug")]
#elif NET35
[assembly: AssemblyConfiguration(".NET Framework 3.5 Debug")]
#elif NET20
[assembly: AssemblyConfiguration(".NET Framework 2.0 Debug")]
#elif NETSTANDARD1_4
[assembly: AssemblyConfiguration(".NET Standard 1.4 Debug")]
#elif NETSTANDARD2_0
[assembly: AssemblyConfiguration(".NET Standard 2.0 Debug")]
#elif NETCOREAPP1_1
[assembly: AssemblyConfiguration(".NET Core 1.1 Debug")]
#elif NETCOREAPP2_0
[assembly: AssemblyConfiguration(".NET Core 2.0 Debug")]
#else
#error Missing AssemblyConfiguration attribute for this target.
#endif
#else
#if NET45
[assembly: AssemblyConfiguration(".NET Framework 4.5")]
#elif NET40
[assembly: AssemblyConfiguration(".NET Framework 4.0")]
#elif NET35
[assembly: AssemblyConfiguration(".NET Framework 3.5")]
#elif NET20
[assembly: AssemblyConfiguration(".NET Framework 2.0")]
#elif NETSTANDARD1_4
[assembly: AssemblyConfiguration(".NET Standard 1.4")]
#elif NETSTANDARD2_0
[assembly: AssemblyConfiguration(".NET Standard 2.0")]
#elif NETCOREAPP1_1
[assembly: AssemblyConfiguration(".NET Core 1.1")]
#elif NETCOREAPP2_0
[assembly: AssemblyConfiguration(".NET Core 2.0")]
#else
#error Missing AssemblyConfiguration attribute for this target.
#endif
#endif
FrameworkVersion.cs
using System.Reflection;
[assembly: AssemblyVersion("3.11.0.0")]
[assembly: AssemblyFileVersion("3.11.0.0")]
OK了,这样每个项目,维护1份 程序集信息了。
关于程序集信息
使用InternalsVisibleTo特性干嘛的
是为了给其他类库测试 Internal级别的方法的,我们知道Internal只能本程序集调用。使用这个特性,就可以不修改源码的情况下,给别的测试项目测试用
这里是Nunit的
1. 如何获取PublicKey?
A: 在命令行下,使用sn -Tp Project1.Test.dll就可以看到PublicKey和PublicKeyToken
2. 如果Project1是个strong-named的项目,那么InternalsVisibleTo必须指定PublicKey,所以Project1.Test也必须使用强签名才能正确使用InternalsVisibleTo, 不然编译会出错,如果Project1没有使用强签名,那么Project1.Test也不必使用强签名,而且在使用InternalsVisibleTo的时候只需要程序集的名字就可以了,不需要设置PuklicKey。
====================www.ayjs.net 杨洋 wpfui.com ayui ay aaronyang=======请不要转载谢谢了。=========
以上内容AY 研究编写
推荐您阅读更多有关于“C#,”的文章
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- express 框架一些渗透技巧
- AY Github项目学框架技巧-CommonServiceLocator
- 渗透技巧之Powershell实战技巧
- 渗透技巧——快捷方式文件的参数隐藏技巧
- Python实用技巧,你不知道的7个好玩的Python技巧
- Python 技巧总结
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Building Social Web Applications
Gavin Bell / O'Reilly Media / 2009-10-1 / USD 34.99
Building a social web application that attracts and retains regular visitors, and gets them to interact, isn't easy to do. This book walks you through the tough questions you'll face if you're to crea......一起来看看 《Building Social Web Applications》 这本书的介绍吧!