Dotnet core / csproj içindeki AssemblyInfo öğesine eşdeğerdir


236

Dotnet çekirdeği .csprojformata geri döndüğünden MyProject.AssemblyInfo.cs, diğerlerinin arasında yeni bir otojenerasyon vardır.

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

Not Bu otomatik olarak her yapı yeniden olduğunu. Daha önce dosya / obj / dizininde bulunuyordu, şimdi dosya diskte bulunamadığından ve hata mesajını tıklatmak herhangi bir dosyayı açmadığından sadece bellekte görünüyor.

Bu hata mesajıdır: resim açıklamasını buraya girin

Orada tanımlandıkları için onları klasikte tanımlayamıyorum AssemblyInfo.cs.

Bir projenin Şirketini ve Sürümünü nerede / nasıl tanımlayabilirim?


5
Bunun kesinlikle dotnet çekirdeği ile ilgili olmadığını unutmayın. Bu daha çok yeni .csproj tabanlı formatla ilgilidir. Bu yeni .csproj biçimini eski .NET Framework'ü hedefleyerek kullanmak mükemmel, örneğin net461
Jim Aho

Yanıtlar:


334

Daha önce fark ettiğiniz gibi, bu ayarların çoğunu .csproj adresinden kontrol edebilirsiniz.

Bunları AssemblyInfo.cs dosyasında saklamayı tercih ederseniz, otomatik olarak oluşturulan montaj niteliklerini kapatabilirsiniz.

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

Başlık altında neler olup bittiğini görmek istiyorsanız, Microsoft.NET.Sdk içindeki Microsoft.NET.GenerateAssemblyInfo.targets'a bakın.


41
Bu şeyi kapatabildiğime sevindim. Bana eski moda, ama iyi eski AssemblyInfo.cs dosyasını .netcore otomatik oluşturulan şeyler tercih ederim. Ayrıca sürümlerimi ve diğer AssembyInfo girişlerinin içeriğini yönetmek için harici araç kullanıyorum. Mülklerimi projenin kendisinden uzak tutmak için özel bir hedef kullanmaya çalıştım ama bir süre beni boğdu.
Ivaylo Slavov

1
Burada aynı. Yeni csproj tabanlı sistemle, eski takımımı kullanamadım. Bu özellik ile, şimdi geri gidebilir, hangi seviyorum!
Structed

5
NuGet, AssemblyInfo.cs dosyasını okumaz. NuGet paket sürümünü tanımlamak için yine de MSBuild özelliklerini kullanmanız gerekir.
natemcmaster

6
dosya otomatik olarak oluşturulduğunda, InternalsVisibleTo özniteliğini yeni csproj biçiminde nasıl ayarlayabilirim?
Shubhan

8
@Shubhan, bu otomatik olarak oluşturulan özelliklerden biri değil. Projenizin herhangi bir yerinde boş bir .cs dosyası oluşturun ve InternalsVisibleTo kodunu ekleyin
natemcmaster

128

Bu ayarlar .csproj dosyasına taşındı.

Varsayılan olarak görünmezler, ancak bunları proje özellikleri Packagesekmesindeki Visual Studio 2017'den keşfedebilirsiniz .

Proje özellikleri, sekmesi Paket

Kaydedildiğinde bu değerler 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>

Dosya gezgini özellikleri bilgi sekmesinde, FileVersion"Dosya Sürümü" ve Version"Ürün sürümü" olarak gösterilir


1
Proje türüm varsa, proje özelliklerindeki ayarlar eksik gibi görünüyor Class Library (.NET Standard). neden olduğu hakkında bir fikrin var mı? Sürüm 15.1, Sürüm 26403.7, Community Edition kullanıyorum.
ventiseis

2
Sınıf Kütüphanesi'ni (.NET Standard) kullanıyorum ve Paketler sekmesinde görüyorum. Orada görüyor musun? Bir kez varsayılanları dışında bir şey "Kaydet", csproj görünecektir.
tofutim

3
Paketler sekmesini kullanırken 1.0. *. * Gibi bir joker karakteri nasıl kullanıyorsunuz?
Soenhay

@Soenhay, joker karakter, paket sürümünü tanımlarken çok fazla mantıklı değil, sadece tüketirken.
Paul Hatcher

@Soenhay, üçüncü taraf araçlarında benzer özelliği kullanmadığınız sürece yapamayacağınızdır.
hultqvist

115

.NET Standard 2.0 projelerim için aşağıdakileri yapıyorum.

Bir Directory.Build.propsdosya oluşturun (örneğin deponuzun kökünde) ve paylaşılacak özellikleri .csprojdosyadan bu dosyaya taşıyın .

MSBuild otomatik olarak alır ve otomatik olarak oluşturulana uygular AssemblyInfo.cs.

dotnet packVisual Studio 2017'de UI ile veya UI aracılığıyla bir tane oluştururken nuget paketine de uygulanırlar .

Bkz. Https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build


12
Bu, daha fazla oy almalı, otomatik olarak oluşturulmasına izin vermeli, ancak yine de bir çözüm boyunca bazı şeyleri paylaşmalıdır
Dan

@Dan Anlaştı, bu diğer cevapların çok altında, çoğu insanın bunu okumadığından şüpheleniyorum.
Lunyx

1
@ Justin, onları proje dosyalarınızda görmeyeceksiniz; ortaya çıkan montajlara uygulanır.
pfx

1
Msbuild kullanmayan bizler ne olacak?
Joe Phillips

1
Bu harika bir cevaptı. Teşekkür ederim. Bazı NuGet paketleri üreten büyük çözümümüzde kullandık ve bu yeni sdk tarzı projeler için eski montaj bilgilerine harika bir alternatif
David Anderson

57

Her zaman kendi ekleyebilir AssemblyInfo.cs Handy geliyor, InternalsVisibleToAttribute, CLSCompliantAttributeotomatik oluşturulmaz ve diğerleri.

AssemblyInfo.cs bir projeye ekleme

  1. Solution Explorer'da sağ tıklayın <project name> > Add > New Folder.

Yeni Klasör Ekle

  1. Klasöre "Özellikler" adını verin.

Ad klasörü Özellikler

  1. "Özellikler" klasörünü sağ tıklayın ve tıklayın Add > New Item....

Yeni öğe ekle

  1. "Sınıf" ı seçin ve "AssemblyInfo.cs" olarak adlandırın.

AssemblyInfo.cs ad dosyası

Otomatik Oluşturulan Nitelikleri Gizleme

Eğer geri özelliklerinizi taşımak isterseniz AssemblyInfo.cs natemcmaster işaret ettiği gibi onları otomatik oluşturulmuş, sen MSBuild bunları bastırmak olabilir zorunda kalmaksızın onun cevabını .


1
Teşekkürler NightOwl888, aradığım cevap bu.
Juniuz

3
Bugünlerde herkesin Visual Studio'ya sahip olduğunu varsaymaktan kaçınırım, bu cevabı bazılarını takip etmeyi zorlaştıran diğer editörler var (örneğin bunu Jetbrains Rider kullanarak bir Mac / Mono'da yapıyorum)
PandaWood

Bazen, yeni Microsoft olası satışları otomatikleştirilmiş derlemelerin derleme numaralarını değiştirmek için çalışabilmesi için AssemblyInfo.cs ile neyin iyi çalıştığını göz önünde bulundurmalıdır.
justdan23

6

NightOwl888'in cevabına ek olarak, bir adım daha ileri gidebilir ve AssemblyInfosadece düz bir sınıf yerine bir sınıf ekleyebilirsiniz :

resim açıklamasını buraya girin


5
Bir netstandard 1.1 projesi için VS2019 bu iletişim kutusunu açtığınızda "Montaj bilgi dosyası" yoktur.
SwissCoder

Bunu gönderdiğiniz için teşekkürler! .NET Core 3.1 kullanıyorum ve tam orada oldu! Tüm önemli varsayılan parçaları ekler.
justdan23

6

Bu konuyu / cevapları aşağıdakilerle genişletmek istiyorum. Birisinin de belirttiği gibi, bu otomatik oluşturulan AssemblyInfo harici araçlar için bir engel olabilir. Benim durumumda, FinalBuilder kullanarak , AssemblyInfo derleme eylemi ile güncellenmiyor bir sorun vardı . Görünüşe göre, FinalBuilder AssemblyInfo~proj konumunu bulmak için dosyaya güveniyor . Proje klasörü altında herhangi bir yere baktığını düşündüm. Hayır. Yani, bunu değiştirmek

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

işin sadece yarısını yaptı, VS IDE / MS Build tarafından oluşturulmuşsa özel montaj bilgilerine izin verdi. Ama montaj bilgi dosyasına manuel manipülasyonlar olmadan da FinalBuilder yapmak gerekiyordu. MSBuild / VS ve FinalBuilder gibi tüm programları karşılamam gerekiyordu.

Bunu mevcut bir giriş ekleyerek çözdüm ItemGroup

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

Şimdi, bu öğeye sahip olan FinalBuilder AssemblyInfo öğesinin yerini bulur ve dosyayı değiştirir. Action None, MSBuild / DevEnv uygulamasının bu girdiyi yok saymasına izin verir ve artık Compilegenellikle projdosyalarda Montaj Bilgisi girişi ile gelen eyleme dayalı bir hata bildirmez .

C: \ Program Files \ dotnet \ sdk \ 2.0.2 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (263,5): hata: Yinelenen 'Derleme' öğeleri dahil edildi. .NET SDK'sı varsayılan olarak proje dizininizden 'Derle' öğeleri içerir. Proje öğenizden bu öğeleri kaldırabilir veya açıkça proje dosyanıza eklemek istiyorsanız 'EnableDefaultCompileItems' özelliğini 'false' olarak ayarlayabilirsiniz. Daha fazla bilgi için bkz. Https://aka.ms/sdkimplicititems . Yinelenen öğeler: 'AssemblyInfo.cs'

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.