web-dev-qa-db-ja.com

Dotnet core/csprojのAssemblyInfoと同じです。

Dotnetコアが.csprojフォーマットに戻ったので、とりわけ自動生成された新しいMyProject.AssemblyInfo.csがあります。

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

これはビルドごとに自動的に再生成されることを意味します。以前はファイルは/ obj /ディレクトリにありましたが、現在はファイルがディスク上に見つからず、エラーメッセージをクリックしてもファイルが開かないため、メモリ内にのみ存在するように見えます。

これはエラーメッセージです: enter image description here

それらが定義されているので、古典的なAssemblyInfo.csでは自分で定義することはできません。

プロジェクトの会社とバージョンをどこで、どのように定義できますか?

159
hultqvist

すでにお気づきのように、これらの設定のほとんどは.csprojで制御できます。

これらをAssemblyInfo.csに保存したい場合は、自動生成されたアセンブリ属性を無効にすることができます。

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

何が起こっているのかを知りたい場合は、Microsoft.NET.Sdk内の Microsoft.NET.GenerateAssemblyInfo.targets をチェックアウトしてください。

241
natemcmaster

これらの設定は.csprojファイルに移動しました。

デフォルトでは表示されませんが、プロジェクトプロパティのPackageタブでVisual Studio 2017から見つけられます。

Project properties, tab 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は「製品バージョン」として表示されます。

85
hultqvist

私の.NET Standard 2.0プロジェクトでは、次のことを行います。

Directory.Build.propsファイルを作成し(たとえば、リポジトリのルートに)、共有するプロパティを.csprojファイルからこのファイルに移動します。

MSBuildは自動的にそれを取得し、それらを自動生成されたAssemblyInfo.csに適用します。

dotnet packを使用してビルドするとき、またはVisual Studio 2017のUIを介してnugetパッケージをビルドするときにも適用されます。

https://docs.Microsoft.com/ja-jp/visualstudio/msbuild/customize-your-build を参照してください。

62
pfx

あなたはいつでもあなた自身の AssemblyInfo.cs を追加することができます、そしてそれはInternalsVisibleToAttributeCLSCompliantAttributeそして自動的に生成されない他の人のために役に立ちます。

プロジェクトへのAssemblyInfo.csの追加

  1. ソリューションエクスプローラーで、<project name> > Add > New Folderを右クリックします。

Add New Folder

  1. フォルダに「プロパティ」という名前を付けます。

Name folder Properties

  1. [プロパティ]フォルダを右クリックし、[Add > New Item...]をクリックします。

Add New Item

  1. 「クラス」を選択して「AssemblyInfo.cs」という名前を付けます。

Name file AssemblyInfo.cs

自動生成属性の抑制

属性を自動生成せずに AssemblyInfo.cs に戻す場合は、natemcmasterが 彼の答え で指摘しているようにMSBuildでそれらを抑制できます。

37
NightOwl888

NightOwl888の答えに加えて、さらに一歩進んで、単なるクラスではなくAssemblyInfoクラスを追加できます。

enter image description here

2
datchung

このトピック/回答を以下のように拡張したいと思います。誰かが言ったように、この自動生成された AssemblyInfo は外部ツールにとって障害となる可能性があります。私の場合は、 FinalBuilder を使用して、 AssemblyInfo がビルドアクションによって更新されないという問題がありました。どうやら、 FinalBuilder AssemblyInfo の場所を見つけるために~projファイルに依存しています。私は思った、それはプロジェクトフォルダの下のどこかを見ていました。いいえ、これを変更する

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

仕事しか持っていなかった、それはVS IDE/MSビルドによって構築された場合それはカスタムアセンブリ情報を許可しました。しかし、私は FinalBuilder を必要としていましたが、アセンブリ情報ファイルを手作業で操作する必要はありません。私はすべてのプログラム、MSBuild/VSとFinalBuilderを満足させる必要がありました。

既存のItemGroupにエントリを追加することでこれを解決しました

<ItemGroup>
   <Compile Remove="Common\**" />
   <Content Remove="Common\**" />
   <EmbeddedResource Remove="Common\**" />
   <None Remove="Common\**" />
   <!-- new added item -->
   <None Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

さて、この項目を持っている、 FinalBuilder AssemblyInfo の場所を見つけてファイルを修正します。アクションNoneはMSBuild/DevEnvにこのエントリを無視させ、Compileファイルのアセンブリ情報エントリに通常付属するprojアクションに基づくエラーを報告しません。

C:\ Program Files\dotnet\sdk\2.0.2\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.DefaultItems.targets(263,5):エラー:重複した「コンパイル」項目が含まれていました。 .NET SDKには、デフォルトでプロジェクトディレクトリからの「コンパイル」項目が含まれています。これらの項目をプロジェクトファイルから削除するか、プロジェクトファイルに明示的に含める場合は、 'EnableDefaultCompileItems'プロパティを 'false'に設定します。詳細については、 https://aka.ms/sdkimplicititems を参照してください。重複した項目は次のとおりです。 'AssemblyInfo.cs'

1
T.S.