错误 CS8357 指定的版本字符串中包含与确定性不兼容的通配符。从版本字符串删除通配符,或者禁用此编译的确定性

今天遇到了这样错误,于是在网上找到一条相关信息


VS版本号定义、规则和相关的Visual Studio插件 - weixin_34362790的博客 - CSDN博客
这个情况我就奇怪了,为什么我的其他的项目都可以用,这个项目不可以这样用?于是我又创建了一些其他的类库等进行测试,同样的问题。从错误提示看应该是项目的配置不正确。

不死心啊,打开之前正常的自动版本号的程序和这个项目的文件(.csproj)进行比较,去掉项目文件和引用等,其实两个项目文件不同的地方不多,那就一个一个是试试,到底是哪个项目属性影响导致的问题。当试到True的时候,发现我新建的项目都是true,而之前的项目这个属性是false,修改成fasle编译测试,通过了,不报错了。于是拿到网上查,说是.NET Core默认的设置。

由于时间比较紧,也没细查其他的,等有空了在查的说明

-------------------------------------------------------------------------------------

再提供几个其他方式实现版本号的思路吧:

将增量(DateTime)信息添加到AssemblyFileVersion属性中,该属性具有不破坏任何依赖性的优点。

你可以结合使用预生成事件生成文件,添加该文件(包括其版本属性)然后使用一种方法来读出那些价值再次。

那是在项目的预生成,事件中:

echo [assembly:System.Reflection.AssemblyFileVersion("%date:~0,4%.%date:~5,2%%date:~8,2%.%time:~0,2%%time:~3,2%.%time:~6,2%")] > $(ProjectDir)Properties\VersionInfo.cs

将生成的VersionInfo.cs文件(Properties子文件夹)包含到项目中.

-------------------------------------------------------------------------------------

Cake支持AssemblyInfo文件修补。手中拿着蛋糕,你可以通过无限的方式实现自动版本递增。

像C#编译器那样递增版本的简单示例:

Setup(() =>

{

// Executed BEFORE the first task.

var datetimeNow = DateTime.Now;

var daysPart = (datetimeNow - new DateTime(2000, 1, 1)).Days;

var secondsPart = (long)datetimeNow.TimeOfDay.TotalSeconds/2;

var assemblyInfo = new AssemblyInfoSettings

{

Version = "3.0.0.0",

FileVersion = string.Format("3.0.{0}.{1}", daysPart, secondsPart)

};

CreateAssemblyInfo("MyProject/Properties/AssemblyInfo.cs", assemblyInfo);

});

你可能感兴趣的:(错误 CS8357 指定的版本字符串中包含与确定性不兼容的通配符。从版本字符串删除通配符,或者禁用此编译的确定性)