由于dotnet核心移回了.csproj格式,有了一个新的自动生成的MyProject.AssemblyInfo.cs,其中包括:

[assembly: AssemblyCompany("MyProject")]
[assembly: AssemblyVersion("1.0.0.0")]

注意,每次构建时都会自动重新生成。 以前,该文件在/obj/目录中找到,现在它似乎只在内存中,因为该文件无法在磁盘上找到,并且单击错误消息不会打开任何文件。

这是错误信息:

因为它们是在那里定义的,所以我不能自己在经典的AssemblyInfo.cs中定义它们。

在哪里/如何定义项目的公司和版本?


当前回答

谢谢,这对我帮助很大。

在我的案例中,构建Blazor服务器端网站的项目在发布和调试上都是成功的,但发布网站仍然失败,出现了重复属性错误,这让我有点困惑。

解决方案是在.csproj和.pubxml文件中添加<GenerateAssemblyInfo>false</GenerateAssemblyInfo>:

项目路径:< > /属性/ PublishProfiles / < ProfileName > .pubxml:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        ...
        <!-- Add the line below -->
        <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    </PropertyGroup>
</Project>

其他回答

谢谢,这对我帮助很大。

在我的案例中,构建Blazor服务器端网站的项目在发布和调试上都是成功的,但发布网站仍然失败,出现了重复属性错误,这让我有点困惑。

解决方案是在.csproj和.pubxml文件中添加<GenerateAssemblyInfo>false</GenerateAssemblyInfo>:

项目路径:< > /属性/ PublishProfiles / < ProfileName > .pubxml:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        ...
        <!-- Add the line below -->
        <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    </PropertyGroup>
</Project>

在。net 5+中,你可以使用AssemblyMetadata:

<AssemblyMetadata include=“bar” value=“baz” />

这些设置已经移动到.csproj文件中。

默认情况下,它们不会显示,但您可以在Visual Studio 2017的项目属性Package选项卡中发现它们。

保存后,可以在MyProject.csproj中找到这些值

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
    <Version>1.2.3.4</Version>
    <Authors>Author 1</Authors>
    <Company>Company XYZ</Company>
    <Product>Product 2</Product>
    <PackageId>MyApp</PackageId>
    <AssemblyVersion>2.0.0.0</AssemblyVersion>
    <FileVersion>3.0.0.0</FileVersion>
    <NeutralLanguage>en</NeutralLanguage>
    <Description>Description here</Description>
    <Copyright>Copyright</Copyright>
    <PackageLicenseUrl>License URL</PackageLicenseUrl>
    <PackageProjectUrl>Project URL</PackageProjectUrl>
    <PackageIconUrl>Icon URL</PackageIconUrl>
    <RepositoryUrl>Repo URL</RepositoryUrl>
    <RepositoryType>Repo type</RepositoryType>
    <PackageTags>Tags</PackageTags>
    <PackageReleaseNotes>Release</PackageReleaseNotes>
  </PropertyGroup>

在文件资源管理器属性信息选项卡中,FileVersion显示为“文件版本”,Version显示为“产品版本”

正如您已经注意到的,您可以在.csproj中控制这些设置中的大部分。

如果希望将这些属性保留在AssemblyInfo.cs中,可以关闭自动生成的程序集属性。

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> 

如果您想了解底层发生了什么,请在Microsoft.NET.Sdk中签出Microsoft.NET.GenerateAssemblyInfo.targets。

我为我的. net标准2.0项目做以下工作。

创建一个Directory.Build.props文件(例如在repo的根目录下) 并将要共享的属性从.csproj文件移动到此文件。

这也支持在多项目解决方案中集中管理这些共享属性,例如允许为所有项目只设置一次版权和/或版本号。

MSBuild将自动拾取并将它们应用到自动生成的AssemblyInfo.cs中。

当使用dotnet包或通过Visual Studio 2017的UI构建一个nuget包时,它们也会应用到nuget包中。

参见https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-your-build

例子:

<Project>
    <PropertyGroup>
        <Company>Some company</Company>
        <Copyright>Copyright © 2020</Copyright>
        <AssemblyVersion>1.0.0.1</AssemblyVersion>
        <FileVersion>1.0.0.1</FileVersion>
        <Version>1.0.0.1</Version>
        <!-- ... -->
    </PropertyGroup>
</Project>