- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
今天我收到一个为“产品版本”指定的版本不是正常的“major.minor.build.revision”格式警告。
与AssemblyInformationalVersionAttribute
的使用有关.
我的程序集属性是:
[assembly: AssemblyInformationalVersion("XXX 1.1.0")]
[assembly: System.Runtime.InteropServices.ComVisible(false)]
基本上,编译器会提示 XXX 1.1.0
看起来不像 x.y.z.r
。来自 MSDN:
The informational version provides additional version information for an assembly, in string format. It is for informational purposes only and is not used at run time. Although you can specify any text, a warning message appears on compilation if the string is not in the format used by the assembly version number, or if it is in that format but contains wildcard characters. This warning is harmless.
所以他们说可能会出现无害的警告。问题是,它破坏了我的构建。我什至无法按照以下错误中的建议抑制 CS1607 警告(我在项目级别尝试过,没有效果)http://connect.microsoft.com/VisualStudio/feedback/details/275197/assemblyinformationalversion-should-not-generate-cs1607
实际上,在我将本地化资源添加到我的项目之前,一切都很好(没有警告)。我以前在项目中有一个 MyResources.resx
文件。我添加了一个本地化的 MyResources.fr.resx
文件,这个资源是警告的来源(或者至少:如果我从项目中删除这个文件,它会在没有警告的情况下编译)。
我没有看到 CS1607(与 x64 和 x86 相关)、AssemblyInformationalVersionAttribute
和本地化资源文件之间的任何链接...
如何修复我的项目,以便我可以将 XXX 1.1.0
用作 AssemblyInformationalVersionAttribute
而没有任何(甚至无害的)警告?
我不太擅长抑制 CS1607 警告(这在引用错误的情况下可能很有用),但我什至没有设法抑制它。
请注意,我通过谷歌搜索发现它是 CS1607,编译器从未返回实际的警告代码。
另请注意,我的项目目标是 .Net 2.0,迁移到 .Net 4.0 可以解决这个问题(但我当然不能这样做)。
欢迎任何解释。
附言: CS1607: The version specified for the 'file version' is not in the normal 'major.minor.build.revision' format in .NET问题不相关(与AssemblyInformationalVersion
无关)
编辑:谢谢汉斯·帕桑特。根据您的回答,我了解到 AssemblyInformationalVersion
用于生成 Win32 VersionInfo
结构中可用的两个 ProductVersion
值。
AssemblyInformationalVersion
属性为空,则使用 AssemblyVersion
。AssemblyInformationalVersion
是 x.y.z
,则两个 ProductVersion
值都是 x.y.z
。AssemblyInformationalVersion
是另一个字符串,则 ProductVersion
的数字值未设置 (0.0.0
),只有文本 ProductVersion
值已设置。我不明白的是,为什么 CS1607 警告仅由编译器在某些特定情况下生成:在我的例子中,仅当项目包含本地化的 resx 文件和目标 .Net 时2.0。
我在 AssemblyInformationalVersion
中使用了一个字符串多年,直到昨天我在项目中添加了一个本地化的 resx 时才发出任何警告。
我可以不设置数字 ProductVersion
值(如您所说,只有文本和人类可读的值对我来说很重要),但是有没有办法防止警告从被抚养?
编辑 2:
我创建了一个非常小的解决方案示例来演示该问题:http://sharesend.com/mb371c3l
Logon.aspx.fr.resx
并重建所有:我的机器上不再有警告,原因不明。最佳答案
C# 编译器确实对这些属性进行了简单的转换。它需要为可执行文件生成非托管 资源。必要的,因为 Windows 对托管资源或属性一无所知。这通常是自动完成的。就像 [AssemblyInformationalAttribute]
自动转换为生成 Version 资源的产品版本号一样。请注意严重的命名不匹配,不是错误。
然而,非托管产品版本非常麻烦。您在 FileVersionInfo 类中看到的东西,允许您从可执行文件中读回非托管版本资源的东西。请注意其 ProductVersion 属性如何返回一个字符串。但是 ProductMajorPart(以及 minor、build 和 private)属性返回一个 int。
您现在可能已经看到摩擦了。由于一些长期遗忘在时间迷雾中的深不可测的原因,版本资源的原始规范包含了产品版本两次。一次作为二进制数,再次作为字符串。字符串可以本地化,这是造成这种重复的可能原因。当您使用非托管资源编辑器查看资源时,您也可以看到这一点。使用文件 + 打开 + 文件并选择可执行文件。双击 Version.1 资源。您还会看到产品版本在此对话框中出现两次。顶部的只接受数字,底部的接受任何字符串。
这让 C# 编译器无所事事,它必须将属性字符串转换为整数,这样它也可以生成二进制数。显然,它不能在没有至少产生警告的情况下就让它出错。 CS1607 的 MSDN 文档中关于这是良性的断言并不十分准确,您确实最终得到了没有二进制产品版本集的资源。然而,这最终导致麻烦的可能性并不大,其他程序通常不会读回它,而且它往往只被人类查看。该文件的资源管理器属性对话框中的“详细信息”属性表会显示它。字符串,不是二进制数。
因此,您需要考虑的变通办法是仅指定一个有效的版本号,因为它确实 是一个版本号。或者自己接管非托管资源的生成,这样您就可以完全控制内容。您可以通过编写资源脚本并使用 rc.exe 进行编译来实现。并通过“项目 + 属性”、“应用程序”选项卡将其告知 C# 编译器,选择“资源文件”单选按钮。请注意您会给自己带来的相当大的痛苦,您现在还有一个任务是保持资源脚本更新并与托管资源同步。我会说,卫星组件特别痛苦。
关于c# - 为什么会生成警告 CS1607 "The version specified for the ' product version' is not in the normal 'major.minor.build.revision' format?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20241686/
Minor GC是用来清理Eden空间的吧?但我使用 jstat 来查看我的 GC 日志。当 Eden 空间已满 90% 时,有 95% 的 Minor GC 发生。然而有时我发现伊甸园空间几乎是空的
由于获得major.minor.release格式,我正在尝试更改svn修订号。 在我的配置中,每次提交时 svn 修订号都会增加 1。 应该可以改吧? 我正在研究如何使用 perl 来做到这一点,但
例如,如何创建一个小模式,将默认前景色更改为灰色,并在退出小模式后,前景色恢复为黑色?当您不希望某些文本在您的肩膀上被看到时,此模式可能很有用。 现在,我运行以下代码将文本颜色变为灰色: (set-f
我用谷歌搜索发现大多数文章都这么说 “当 JVM 无法为新对象分配空间时,总会触发 Minor GC,” 但是从visualVM中,我发现minor gc发生得非常频繁。我可以看到Eden空间将被回收
我将一些 sticknfind 信标与 android (sticknfind android SDK) 一起使用。如何从我的源代码中的信标获取主要和次要值?我使用了应用程序:StickNFind B
我已经为 Linux 编写了一个 platform_driver。现在,我希望它成为/dev/myDrv 下的字符设备。 现在,驱动程序没有出现在/dev/myDrv 中,尽管我使用“insmod”成
java version "1.6.0_17" Java(TM) SE Runtime Environment (build 1.6.0_17-b04) Java HotSpot(TM) 64-Bit
我正在尝试为 Android 开发 BLE 应用程序。 有什么方法可以检测和读取 Android 设备上的 Beacon 的 UDID、Major、Minor? 我已经阅读了 RadiusNetwor
我已经对谷歌饼图和隐藏的切片标签进行了大量研究,但没有找到切片外的任何标签,所以我希望有另一种解决方案而不是 already suggested on SO . 我生成了很多不同的图表类型,为了更好的
概念: ● 新生代 GC(Minor GC):从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,因为 Java 对象大多都具备朝生夕灭的特性,所以 Minor
我们发现次要 GC 暂停时间有所增加。该应用程序是一个用 Java 编写的服务器,每秒执行 500 个事务。CMS 收集后,暂停时间减少,但运行数小时后暂停时间再次增加。我已使用 vmstat 检查了
我经常遇到较高的次要 GC 暂停时间(约 9 秒)。 该应用程序是一个用 Java 编写的服务器,每秒执行 3 个事务。 尽管没有 I/O 过多 Activity 堆参数是: -Xms1G -Xmx1
我之前使用2G new Age内存,我看到minor gc每10秒发生一次,每次需要0.1-0.15秒,我想减少minor gc频率,所以我将new Age内存设置为3G。之后,minor gc 每
我正试图在大型企业 Java 应用程序中了解垃圾回收。我有 GC 日志并开始使用各种工具查看它们 - 这里的屏幕截图是使用 GCViewer 完成的. (遗憾的是,没有包含更详细的 GC 信息的日志.
在semantic versioning一般规则是仅在引入向后兼容功能时才增加次要编号,否则必须增加主要编号。 same approach ,但具有不同的算法,由 libtool 使用。 我有一个问题
您将如何编写一个 build.xml 文件,既不使用自定义代码也不使用外部依赖项(例如 shell 脚本): 生成major.minor.revision 形式的内部版本号(例如,01.02.34)。
最近项目更新jdk,由之前的1.7更新到1.8。下载并安装好新的jdk以后,编译、启动tomcat的时候,报错了,提示:“unsupported major.minor version xxx ”。
是否可以合并:lighters当存在某种事件次要模式组合时,在模式线上?如果是,那请问怎么办? 例子: 次要模式 1 的 :lighter 为 " -" 次要模式二的 :lighter 为 " +"
我似乎无法弄清楚检测 iBeacons 时主要值和次要值的相关性或重要性。当我注册和配置我的 Gimbal 信标时,我给它一组特定的 UUID、主要和次要值,然后当我使用 cordova iBeaco
无法导入项目。从build.gradle导入时,给出不受支持的Major.Minor版本51错误 最佳答案 (从another solution复制) 解: 我的解决方案是编辑/Application
我是一名优秀的程序员,十分优秀!