2017-02-09 47 views
81

dotnetコアが.csproj形式に戻ったので、新しい自動生成MyProject.AssemblyInfo.csがあります。dotnet core/csprojのAssemblyInfoに相当する

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

これは、すべてのビルドを自動的に再生成されていること。 以前は/ obj /ディレクトリにファイルがありましたが、ディスク上にファイルが見つからないため、メモリ内にしか表示されません。エラーメッセージをクリックしてもファイルは開かれません。彼らは、私は、古典的なAssemblyInfo.csでそれらを自分で定義することはできませんが定義されているので enter image description here

これはエラーメッセージです。

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

答えて

120

すでに気づいたとおり、これらの設定の大部分は.csprojで制御できます。

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

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

あなたは、ボンネットの下に何が起こっているMicrosoft.NET.Sdkの内部チェックアウトMicrosoft.NET.GenerateAssemblyInfo.targetsを確認したい場合。

+13

私はこの事をオフにすることができることを喜んで参照してください。私は昔ながらのものと呼んでいますが、私は良い古いAssemblyInfo.csファイルを.netcoreの自動生成されたものよりも好きです。私は外部ツールを使用して、バージョンと他のAssembyInfoエントリの内容を管理します。私は、プロジェクト自体からプロパティを保持するためにカスタムターゲットを使用しようとしましたが、それは私をしばらく窒息させました。 –

+0

同じです。新しいcsprojベースのシステムでは、従来のツールを使用できませんでした。このプロパティで、私は今戻って、私は愛する! – Structed

+0

あなたがバージョンをアセンブリ属性として定義すると、何とかバージョンがnugetパッケージジェネレータによって選択されません。回避策はありますか? – theDmi

46

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

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

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は、「製品版」として示されている保存

+0

私のプロジェクトタイプが 'Class Library(.NET Standard)'の場合、プロジェクトプロパティの設定が見当たりません。理由は何ですか?私はバージョン15.1、リリース26403.7、Community Editionを使用しています。 – ventiseis

+0

私はクラスライブラリ(.NET標準)を使用しており、パッケージタブでそれを確認しています。あなたはそこにそれを見ますか?デフォルト以外のものを "保存"すると、それはcsprojに表示されます。 – tofutim

13

いつでも独自のAssemblyInfo.csを追加することができます。これはInternalsVisibleToAttributeCLSCompliantAttributeなどが自動的に生成されません。

ソリューションエクスプローラで、<project name> > Add > New Folderを右クリックします。フォルダに「プロパティ」と名前を付けます。プロパティフォルダを右クリックし、AssemblyInfo.csという名前の新しいコードファイルを追加します。

Visual Studioでは、「プロパティ」という名前のフォルダも検出され、レンチアイコンが表示されます。

0

このトピック/回答を次のように拡張したいと思います。誰かが述べたように、この自動生成AssemblyInfoは、外部ツールの障害になることがあります。私の場合、FinalBuilderを使用して、AssemblyInfoがビルドアクションによって更新されていないという問題がありました。明らかに、FinalBuilderはファイルに依存し、AssemblyInfoの場所を見つけます。私は、プロジェクトフォルダのどこでも探していたと思っていました。いいえ、これを変更すると、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:\プログラムファイル\ DOTNET \ SDK \ 2.0.2 \ SDKの\ Microsoft.NET.Sdk \ \ Microsoft.NET.Sdk.DefaultItems.targetsを構築(263,5): エラー:重複 " 「コンパイル」項目が含まれていました。 .NET SDKには、デフォルトでプロジェクトディレクトリの「コンパイル」項目が含まれています。 これらのアイテムをプロジェクトファイルから削除するか、プロジェクトファイルに明示的に含める場合は、 'EnableDefaultCompileItems'プロパティを 'false'に設定することができます。 詳細については、https://aka.ms/sdkimplicititemsを参照してください。重複した項目は次のとおりでした: 'AssemblyInfo.cs'