使用自动生成的.NET Core/Standard AssemblyInfo.cs
但是InternalsVisibleTo呢?
选择退出自动装配信息生成过程并使用我们自己的自动增量方案
使用自动生成的
.NET Core/Standard AssemblyInfo.cs
当您创建一个新的
.NET Core/.NET Standard
项目时,您将获得一组自动生成的属性,这些属性基于项目的这些设置。
实际上,可以在
obj
文件夹中为您创建一个自动生成的
xxxxAssemblyInfo.cs
类。
/------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("SomeDemoCode.Std")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("SomeDemoCode.Std")]
[assembly: System.Reflection.AssemblyTitleAttribute("SomeDemoCode.Std")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.
因此,当我们构建项目时,最终将这个版本应用于项目的结果输出。
好的,这说明了
AssemblyInfo
资料
如何在
.NET Core/Standard
中工作,但是
.NET Core/Standard
执行自动递增版本的方式是什么?
读完所有这些内容后,最好的方法似乎是基于坚持使用自动生成的
Assembly.info
资料,但想出一些方案来帮助在构建时生成程序集版本。
这意味着您要确保您的
.csproj
文件看起来像这样,可以看出其中一些
.NET Core/Standard
自动生成的
AssemblyInfo
资料可以直接在项目文件中使用。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Platforms>x64</Platforms>
</PropertyGroup>
<PropertyGroup>
<DefineConstants>STD</DefineConstants>
<PlatformTarget>x64</PlatformTarget>
<AssemblyName>SomeDemoCode.Std</AssemblyName>
<RootNamespace>SomeDemoCode.Std</RootNamespace>
<VersionSuffix>1.0.0.$([System.DateTime]::UtcNow.ToString(mmff))</VersionSuffix>
<AssemblyVersion Condition=" '$(VersionSuffix)' == '' ">0.0.0.1</AssemblyVersion>
<AssemblyVersion Condition=" '$(VersionSuffix)' != '' ">$(VersionSuffix)</AssemblyVersion>
<Version Condition=" '$(VersionSuffix)' == '' ">0.0.1.0</Version>
<Version Condition=" '$(VersionSuffix)' != '' ">$(VersionSuffix)</Version>
<Company>SAS</Company>
<Authors>SAS</Authors>
<Product>Demo 1.0</Product>
</PropertyGroup>
</Project>
有了这个,您将只使用
.NET Core/Standard
方法就可以获得自动版本化的
Assembly
版本
但是
InternalsVisibleTo
呢?
通常,我们仍然希望将
.NET Standard
项目公开给测试项目。而且,如果
.NET Core/Standard
项目基于默认的值或实际
.csproj
文件中的属性自动生成
AssemblyInfo
,那么我们如何添加
InternalsVisibleTo
,为
.NET Core/Standard
项目自动创建的
AssemblyInfo
似乎没有涵盖这一点,它似乎也不能作为
csproj
级别的
MSBUILD
属性项使用。那么我们该怎么做呢?
幸运的是,这非常简单,我们只需要在一个自定义文件中执行以下操作,即可调用所需的任何文件,如果需要,甚至可以将其称为
“
AssemblyInfo.cs
”
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("SomeDemoCode.IntegrationTests")]
选择退出自动装配信息生成过程并使用我们自己的自动增量方案
如果您想使用
.NET Framework
方法进行自动版本控制,通常可以使用
[assembly: AssemblyVersion("1.0.*")]
因此,您可能会想,嗯,所以我可以通过添加自己的
AssemblyInfo.cs
来重写它,但这将无法正常工作,您在构建时会得到此信息
> Error CS0579: Duplicate 'System.Reflection.AssemblyFileVersionAttribute' attribute
> Error CS0579: Duplicate 'System.Reflection.AssemblyInformationalVersionAttribute' attribute
> Error CS0579: Duplicate 'System.Reflection.AssemblyVersionAttribute' attribute
幸运的是,我们可以选择退出此自动生成过程,在此过程中,我们必须将以下内容添加到我们的
.NET Core/.NET
标准
csproj
文件中。
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<Deterministic>false</Deterministic>
</PropertyGroup>
您需要确定性属性,否则将收到此错误
Wildcards are only allowed if the build is not deterministic,
which is the default for .Net Core projects. Adding False to csproj fixes the issue.
有了这个,我们可以包括一个自定义
AssemblyInfo.cs
,它可以使用自动递增的版本号,在这里,我们在指定
AssemblyVersion
时使用通配符
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SomeDemoCode.Std")]
[assembly: AssemblyDescription("SomeDemoCode .NET Standard")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("SAS")]
[assembly: AssemblyProduct("SAS 1.0")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("CA7543D7-0F0F-4B48-9398-2712098E9324")]
// Version information for an assembly consists of the following four values:
// Major Version
// Minor Version
// Build Number
// Revision
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.*")]
现在,当我们构建时,您将在
.NET Core/Standard
项目中获得一些不错的自动递增程序集版本号。
目录使用自动生成的.NET Core/Standard AssemblyInfo.cs但是InternalsVisibleTo呢?选择退出自动装配信息生成过程并使用我们自己的自动增量方案使用自动生成的.NET Core/Standard AssemblyInfo.cs当您创建一个新的.NET Core/.NET Standard项目时,您将获得一组自动生成的属性,这些属性基于项...
一般来说需要更改我们API的时候才考虑
版本控制
,但是我觉得我们不应该等到那时候来实现它,我们应该有一个版本策略从我们应用程序开发时就开始制定好我们的策略,我们一直遵循着这个策略进行开发。
我们其实可以通过多种方式进行实现我们API版本的控制,其实对于
版本控制
没有最好的方式,这完全取决于我们面向的使用者。
API
版本控制
类型
安装
版本控制
包
Install-Package Microsoft.AspNet
Core
.Mvc.Versioning
在Startup.cs中的ConfigureServices方法中进行版本设置,以及在控制器通过特性进行设置版本,这样可以实现
版本控制
。
ASP
.Net
:
只需把 AssemblyInfo.cs文件中的[assembly: AssemblyVersion("1.0.0.0")]改成[assembly: AssemblyVersion("1.0.*")],另外还需要把[assembly: AssemblyFileVersion("1.0.0.0")]注释屏蔽掉。这样再生成的程序集就是
自动
版本号
了。
按照这个格式出来的
版本号
,
只需把AssemblyInfo.cs文件中的[assembly:
AssemblyVersion("1.0.0.0")]改成[assembly:
AssemblyVersion("1.0.*")],另外还需要把[assembly:
AssemblyFileVersion("1.0.0.0")]注释屏蔽掉。这样再生成的程序集就是
自动
版本号
了。
按照这个格式出来的
版本号
...
using System.Reflection;
using System.Runtime.Loader;
using Microsoft.Extensions.DependencyModel;
namespace AssemblyLoadingDynamic
public class Program
...
现在客户端的代码是通过添加服务引用的方式
自动
创建的,同时
自动
在App.config中添加了配置内容,我想要不需要这些配置内容的用纯代码创建的客户端。
一、服务引用
自动
添加的文件
进入服务引用
自动
添加的文件夹,有好几个文件
item.xsd:描述了服务的信息
https://www.codeproject.com/articles/31236/how-to-update-assembly-version-number-automaticall
Examples
AssemblyInfoUtil.exe -set:3.1.7.53 "C:\Program Files\MyProject1\AssemblyInfo.cs"
Set the ...