从 GitLab-Runner 构建时合并的 AssemblyInfo
AssemblyInfo ingrored when building from GitLab-Runner
在 Windows 机器上,有一个来自具有管理员权限的域用户的 GitLab-Runner 运行。当我以该用户身份登录并调用 dotnet build -c release
构建 ASP.NET 核心应用程序时,dll 具有来自 AssemblyInfo.cs 文件的所有信息。当我作为 CI 作业的一部分执行相同操作时,生成的 dll 缺少所有这些信息(例如版本号)。
AssemblyInfo.cs 文件不是存储库的一部分,相反,它是由预构建事件生成的(使用 gitWCRev.exe 工具)。然而,在 运行ning 一些测试之后,我可以看到 AssemblyInfo.cs 实际上是由 运行 作业 运行 生成的.
如能提供有关文件为何被忽略以及如何解决此问题的任何帮助,我们将不胜感激。
起初我认为这可能与 Pre-build task of Visual Studio project fails in GitLab Runner 问题有关,但我没有发现任何构建错误。
在同一台机器上,我构建了一个 .Net Framework 应用程序,它具有相同的 AssemblyInfo 设置,但由 运行ner 使用 msbuild /property:Configuration=Release
编译,生成的 dll 文件具有所有预期的信息。
事实证明问题部分与 AssemblyInfo.cs 文件不属于存储库的一部分有关。
SDK-style csproj一般不列出项目中的文件,而是根据文件夹内容来计算。当 dotnet build
是 运行 时,AssemblyInfo.cs 不存在于项目目录中(GitLab-Runner 通常会在启动 job/pipeline 之前清除存储库中不存在的文件),所以构建工具不知道他们需要加载它。文件是由构建工具创建的,这没有区别。
事实证明,解决方案是在 运行 宁 dotnet build
之前创建一个空的 AssemblyInfo.cs 文件。这样构建工具就知道他们需要编译它。实际编译仍然发生在预构建事件之后,因此所有需要的信息都在那里。
我使用 PowerShell 创建了空 AssemblyInfo.cs 文件:
New-Item -Path "Properties/AssemblyInfo.cs" -ItemType File
此外,检查构建日志帮助我最终弄明白了。为了获取构建日志,我调用了这样的构建工具:
dotnet build -c release /flp:v=diag
.Net Framework 应用没有这个问题,因为它不是 SDK 风格的项目。编译所需的所有文件都列在项目文件中,构建工具知道加载它们,即使它们是在预构建事件期间创建的。
在 Windows 机器上,有一个来自具有管理员权限的域用户的 GitLab-Runner 运行。当我以该用户身份登录并调用 dotnet build -c release
构建 ASP.NET 核心应用程序时,dll 具有来自 AssemblyInfo.cs 文件的所有信息。当我作为 CI 作业的一部分执行相同操作时,生成的 dll 缺少所有这些信息(例如版本号)。
AssemblyInfo.cs 文件不是存储库的一部分,相反,它是由预构建事件生成的(使用 gitWCRev.exe 工具)。然而,在 运行ning 一些测试之后,我可以看到 AssemblyInfo.cs 实际上是由 运行 作业 运行 生成的.
如能提供有关文件为何被忽略以及如何解决此问题的任何帮助,我们将不胜感激。
起初我认为这可能与 Pre-build task of Visual Studio project fails in GitLab Runner 问题有关,但我没有发现任何构建错误。
在同一台机器上,我构建了一个 .Net Framework 应用程序,它具有相同的 AssemblyInfo 设置,但由 运行ner 使用 msbuild /property:Configuration=Release
编译,生成的 dll 文件具有所有预期的信息。
事实证明问题部分与 AssemblyInfo.cs 文件不属于存储库的一部分有关。
SDK-style csproj一般不列出项目中的文件,而是根据文件夹内容来计算。当 dotnet build
是 运行 时,AssemblyInfo.cs 不存在于项目目录中(GitLab-Runner 通常会在启动 job/pipeline 之前清除存储库中不存在的文件),所以构建工具不知道他们需要加载它。文件是由构建工具创建的,这没有区别。
事实证明,解决方案是在 运行 宁 dotnet build
之前创建一个空的 AssemblyInfo.cs 文件。这样构建工具就知道他们需要编译它。实际编译仍然发生在预构建事件之后,因此所有需要的信息都在那里。
我使用 PowerShell 创建了空 AssemblyInfo.cs 文件:
New-Item -Path "Properties/AssemblyInfo.cs" -ItemType File
此外,检查构建日志帮助我最终弄明白了。为了获取构建日志,我调用了这样的构建工具:
dotnet build -c release /flp:v=diag
.Net Framework 应用没有这个问题,因为它不是 SDK 风格的项目。编译所需的所有文件都列在项目文件中,构建工具知道加载它们,即使它们是在预构建事件期间创建的。