2010-05-10 160 views
0

我正在试验Assembly和File版本号。尽管我的程序在IDE中运行良好,但是在创建安装文件并使用InvalidDeploymentException安装应用程序崩溃之后。C#.NET应用程序在启动后立即崩溃

我该怎么做才能解决此问题?

+0

你可以发布你的异常/堆栈跟踪等的全部细节? – 2010-05-10 11:13:02

+0

我能够通过增加程序集和文件版本来解决它。 在崩溃之前,我将其设置为1.0.0.4,然后将其重新设置为1.0.0.0。这导致了崩溃,但我将其更改为1.0.0.5,现在它可以正常工作。无论如何,这两个数字需要什么? – 2010-05-10 11:29:33

回答

1

[AssemblyVersion]和[AssemblyFileVersion]属性扮演不同的角色。 [AssemblyVersion]仅对托管代码可见,对GAC很重要。无论何时在程序集的公共接口中进行重大更改,您都应该将此数字提高。

编译器使用/ win32res命令行选项将非托管资源嵌入到程序集中。这包括VERSIONINFO resource,可由所有非托管代码读取,包括shell。它决定了当您在资源管理器中右键单击该程序集并查看“详细信息”属性页时看到的内容。显示的“文件版本”值由[AssemblyFileVersion]属性设置。 [AssemblyVersion]值在此处不可见,Explorer尚未知道如何读取该值。

由您来决定如何使用此属性。崩溃表明在部署代码中进行了一些最低限度的完整性检查,从未试图让自己错误地看到会发生什么。然而,让它们相同将会很有意义。

Microsoft以不同的方式使用[AssemblyFileVersion],它们会自动为每个构建增加它并钉住[AssemblyVersion]。这是一个好主意和我使用的策略。然而非常具有讽刺意味的是,自动版本递增功能正好相反,它只能自动递增[AssemblyVersion]。叹。