在AssemblyInfo.cs

时间:2018-01-24 09:13:04

标签: c# asp.net .net

当我们尝试在启用 Precompile 期间发布我们的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)

Project.WebUI AssemblyInfo.cs中,我们引用 Project.Resources ,如下所示:

using Project.Resources;

....

[assembly: AssemblyVersion(VersionInformation.FileVersion)]
[assembly: AssemblyFileVersion(VersionInformation.FileVersion)]
[assembly: AssemblyInformationalVersion(VersionInformation.ProductVersion)]

Class 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  

我们的发布资料如下所示:

[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)

为什么会出现此错误,我们如何解决此问题?

以下是错误的输出日志:

------ 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?)

2 个答案:

答案 0 :(得分:4)

显然在"发布" csc.exe尝试编译AssemblyInfo.cs的{​​{1}},但只编译此文件。因此无法获得对Project.WebUI的正确引用。

我的同事为我们带来的解决方案:

  • 从所有Project.Resources个文件中删除所有版本属性
  • AssemblyInfo.cs项目中创建一个新文件,例如Project.Resources
  • 该文件的唯一内容是像

    这样的版本属性
    AssemblyVersion.cs
  • 在每个其他项目中创建[assembly: AssemblyFileVersion(VersionInformation.FileVersion)] 的链接

答案 1 :(得分:0)

在与.SLN相同的文件夹中创建CommonAssemblyInfo.cs,然后将要共享的属性放在此处。

一次一个项目:选择“属性”组,右键单击“添加”>“现有项”,选择CommonAssemblyInfo.cs,然后从“添加”按钮菜单中选择“添加为链接”。从AssemblyInfo.cs中删除这些属性。