Dotnetコアが.csproj
フォーマットに戻ったので、とりわけ自動生成された新しいMyProject.AssemblyInfo.cs
があります。
[Assembly: AssemblyCompany("MyProject")]
[Assembly: AssemblyVersion("1.0.0.0")]
注 これはビルドごとに自動的に再生成されることを意味します。以前はファイルは/ obj /ディレクトリにありましたが、現在はファイルがディスク上に見つからず、エラーメッセージをクリックしてもファイルが開かないため、メモリ内にのみ存在するように見えます。
それらが定義されているので、古典的なAssemblyInfo.cs
では自分で定義することはできません。
プロジェクトの会社とバージョンをどこで、どのように定義できますか?
すでにお気づきのように、これらの設定のほとんどは.csprojで制御できます。
これらをAssemblyInfo.csに保存したい場合は、自動生成されたアセンブリ属性を無効にすることができます。
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
何が起こっているのかを知りたい場合は、Microsoft.NET.Sdk内の Microsoft.NET.GenerateAssemblyInfo.targets をチェックアウトしてください。
これらの設定は.csprojファイルに移動しました。
デフォルトでは表示されませんが、プロジェクトプロパティのPackage
タブでVisual Studio 2017から見つけられます。
保存すると、これらの値は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
は「製品バージョン」として表示されます。
私の.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 を参照してください。
あなたはいつでもあなた自身の AssemblyInfo.cs を追加することができます、そしてそれはInternalsVisibleToAttribute
、CLSCompliantAttribute
そして自動的に生成されない他の人のために役に立ちます。
<project name> > Add > New Folder
を右クリックします。Add > New Item...
]をクリックします。属性を自動生成せずに AssemblyInfo.cs に戻す場合は、natemcmasterが 彼の答え で指摘しているようにMSBuildでそれらを抑制できます。
このトピック/回答を以下のように拡張したいと思います。誰かが言ったように、この自動生成された 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'