当我们尝试在发布期间启用预编译的情况下发布我们的 ASP.NET 应用程序时,它会失败,因为我们引用了AssemblyInfo.cs文件中的项目。
这是我们的项目结构:
Project.WebUI (ASP.NET MVC App on .NET 4.6.2)
Project.Resources (Class Library on .NET 4.6.2)
Project.Domain (Class Library on .NET 4.6.2)
Project.Services (Class Library on .NET 4.6.2)
Run Code Online (Sandbox Code Playgroud)
在AssemblyInfo.cs的Project.WebUI我们引用Project.Resources是这样的:
using Project.Resources;
....
[assembly: AssemblyVersion(VersionInformation.FileVersion)]
[assembly: AssemblyFileVersion(VersionInformation.FileVersion)]
[assembly: AssemblyInformationalVersion(VersionInformation.ProductVersion)]
Run Code Online (Sandbox Code Playgroud)
类VersionInformation是Project.Resources 中的静态类。
所有其他程序集也有这些参考 AssemblyVersion
当我们构建(调试或发布)时,它将通过而没有任何错误。当我们发布Project.WebUI项目时,我们收到以下错误:
Severity Code Description Project File Line Suppression State
Error The type or namespace name 'Project' could not be found (are you missing a using directive or an assembly reference?) Project.WebUI Properties\AssemblyInfo.cs 3
Error The name 'VersionInformation' does not exist in the current context Project.WebUI Properties\AssemblyInfo.cs 34
Error The name 'VersionInformation' does not exist in the current context Project.WebUI Properties\AssemblyInfo.cs 35
Error The name 'VersionInformation' does not exist in the current context Project.WebUI Properties\AssemblyInfo.cs 36
Run Code Online (Sandbox Code Playgroud)
我们的发布配置文件如下所示:
[X] Delete all existing files prior to publish
[X] Precompile during publishing
Precompile Options
[ ] Allow precompiled site to be updatable
[ ] Emit debug information
Merge Options
[ ] Do not merge
[ ] Do not merge. Create a separate assembly for each page and control
[X] Merge all outputs to a single assembly
"Project.Views"
[X] Treat as library component (remove the AppCode.compiled file)
Run Code Online (Sandbox Code Playgroud)
为什么会发生此错误,我们该如何解决?
这是错误的输出日志:
------ Publish started: Project: Project.WebUI, Configuration: Release Any CPU ------
Connecting to C:\BuildArtifacts\...
Transformed Web.config using C:\Development\Project.WebUI\Web.Release.config into obj\Release\TransformWebConfig\transformed\Web.config.
Copying all files to temporary location below for package/publish:
obj\Release\AspnetCompileMerge\Source.
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v \ -p C:\Development\Project.WebUI\obj\Release\AspnetCompileMerge\Source -c C:\Development\Project.WebUI\obj\Release\AspnetCompileMerge\TempBuildDir
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Roslyn\csc.exe /out:obj\Release\AssemblyInfo\AssemblyInfo.dll /target:library Properties\AssemblyInfo.cs
Properties\AssemblyInfo.cs(34,28): Error CS0103: The name 'VersionInformation' does not exist in the current context
Properties\AssemblyInfo.cs(35,32): Error CS0103: The name 'VersionInformation' does not exist in the current context
Properties\AssemblyInfo.cs(36,41): Error CS0103: The name 'VersionInformation' does not exist in the current context
Properties\AssemblyInfo.cs(3,7): Error CS0246: The type or namespace name 'Project' could not be found (are you missing a using directive or an assembly reference?)
Run Code Online (Sandbox Code Playgroud)
显然,在“发布”期间,csc.exe尝试编译AssemblyInfo.cs我们的Project.WebUI,但仅此文件。所以它无法正确引用Project.Resources.
我同事带来的解决方案对我们有用:
AssemblyInfo.cs文件中删除所有版本属性Project.Resources项目中创建一个新文件,如AssemblyVersion.cs该文件的唯一内容是像这样的版本属性
[assembly: AssemblyFileVersion(VersionInformation.FileVersion)]
Run Code Online (Sandbox Code Playgroud)AssemblyVersion.cs在每个其他项目中创建一个链接
| 归档时间: |
|
| 查看次数: |
1059 次 |
| 最近记录: |