在Windows机器上,有一个具有管理权限的域用户运行的。当我以这个用户的身份登录并调用dotnet build -c release来构建ASP.NET核心应用程序时,dll拥有来自ASP.NET文件的所有信息。当我执行与CI作业相同的操作时,生成的dll将丢失所有这些信息(例如版本号)。
AssemblyInfo.cs文件不是存储库的一部分,而是由预构建事件(使用gitWCRev.exe工具)生成的。但是,在运行了一些测试之后,我可以看到,当作业由运行者运行时,AssemblyInfo.cs实际上是生成的。
任何帮助,为什么文件被忽略,以及如何克服这个问题,将不胜感激。
起初,我认为这可能与Pre-build task of Visual Studio project fails in GitLab Runner问题有关,但我没有发现任何构建错误。
在同一台机器上,我构建了一个.Net框架应用程序,它具有相同的AssemblyInfo设置,但由运行程序使用msbuild /property:Configuration=Release编译,生成的dll文件具有所有预期的信息。
发布于 2022-01-17 14:41:38
事实证明,问题在一定程度上与AssemblyInfo.cs文件不属于存储库有关。
SDK风格的csproj通常不列出项目中的文件,而是根据文件夹内容来计算它们。运行dotnet build时,AssemblyInfo.cs不在项目目录中(GitLab通常在启动作业/管道之前清除存储库中不存在的文件),因此构建工具不知道它们需要加载它。这个文件是由构建工具创建的,这并没有什么区别。
该解决方案被证明是在运行AssemblyInfo.cs之前创建一个空的dotnet build文件。这样,构建工具就知道他们需要编译它。实际编译仍然发生在预构建事件之后,所以所有需要的信息都在那里。
我使用AssemblyInfo.cs创建了空的PowerShell文件:
New-Item -Path "Properties/AssemblyInfo.cs" -ItemType File此外,查看构建日志帮助我最终找到了答案。为了获得构建日志,我称之为构建工具,如下所示:
dotnet build -c release /flp:v=diag.Net框架应用程序没有这个问题,因为它不是SDK风格的项目。编译所需的所有文件都列在项目文件中,构建工具知道加载它们,即使它们是在预构建事件期间创建的。
https://stackoverflow.com/questions/70740091
复制相似问题