dotnet core / csproj의 AssemblyInfo와 동일


236

닷넷 코어가 .csproj형식 으로 다시 이동했기 때문에 다른 것들을 MyProject.AssemblyInfo.cs포함 하는 새로운 자동 생성 이 있습니다.

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

참고 이 자동으로 모든 빌드를 다시 생성된다. 이전에는 파일이 / obj / 디렉토리에서 발견되었으므로 디스크에서 파일을 찾을 수없고 오류 메시지를 클릭해도 파일이 열리지 않으므로 메모리에만있는 것으로 나타납니다.

이것은 오류 메시지입니다. 여기에 이미지 설명을 입력하십시오

그것들이 거기에 정의되어 있기 때문에 고전에서 직접 정의 할 수 없습니다 AssemblyInfo.cs.

프로젝트의 회사 및 버전을 어디서 / 어떻게 정의 할 수 있습니까?


5
이것은 닷넷 코어와 밀접한 관련이 없습니다. 이것은 오히려 새로운 .csproj 기반 형식과 관련이 있습니다. 예를 들어 net461
Jim Aho

답변:


334

이미 알고 있듯이 .csproj에서 대부분의 설정을 제어 할 수 있습니다.

AssemblyInfo.cs에 이러한 속성을 유지하려면 자동 생성 된 어셈블리 속성을 해제 할 수 있습니다.

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

어떤 일이 벌어지고 있는지 보려면 Microsoft.NET.Sdk 에서 Microsoft.NET.GenerateAssemblyInfo.targets를 확인하십시오.


41
이 기능을 해제 할 수있어 기쁩니다. 구식이라고 부르지 만 자동 생성 된 .netcore보다 오래된 AssemblyInfo.cs 파일을 선호합니다. 또한 외부 도구를 사용하여 내 버전과 다른 AssembyInfo 항목의 내용을 관리합니다. 속성을 프로젝트 자체에서 유지하기 위해 사용자 정의 대상을 사용하려고했지만 잠시 동안 질식했습니다.
Ivaylo Slavov

1
여기도 마찬가지입니다. 새로운 csproj 기반 시스템에서는 레거시 툴링을 사용할 수 없었습니다. 이 속성을 사용하면 이제 돌아가서 좋아합니다!
Structed

5
NuGet은 AssemblyInfo.cs를 읽지 않습니다. NuGet 패키지 버전을 정의하려면 여전히 MSBuild 속성을 사용해야합니다.
natemcmaster

6
파일이 자동으로 생성되면 새 csproj 형식으로 InternalsVisibleTo 속성을 설정하는 방법은 무엇입니까?
Shubhan

8
@Shubhan 이것은 자동 생성 속성 중 하나가 아닙니다. 프로젝트 어딘가에 빈 .cs 파일을 만들고 InternalsVisibleTo 코드를 추가하십시오
natemcmaster

128

해당 설정이 .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으로 표시되고 "제품 버전"으로 표시됩니다.


1
프로젝트 유형이 인 경우 프로젝트 속성의 설정이 누락 된 것 같습니다 Class Library (.NET Standard). 왜 그런지 아십니까? 버전 15.1, 릴리스 26403.7, Community Edition을 사용하고 있습니다.
ventiseis

2
클래스 라이브러리 (.NET 표준)를 사용하고 있으며 패키지 탭에서 봅니다. 거기 보입니까? 기본값 이외의 것을 "저장"하면 csproj에 표시됩니다.
tofutim

3
패키지 탭을 사용할 때 1.0. *. *와 같은 와일드 카드를 어떻게 사용합니까?
Soenhay

@Soenhay, 와일드 카드는 패키지 버전을 정의 할 때, 소비 할 때만 의미가 없습니다.
Paul Hatcher

@Soenhay 내 이해는 타사 도구에서 유사한 기능을 사용하지 않으면 할 수 없다는 것입니다.
hultqvist 2016 년

115

.NET Standard 2.0 프로젝트에서 다음을 수행합니다.

Directory.Build.props파일을 작성하고 (예 : 저장소의 루트에) .csproj파일에서이 파일 로 공유 할 특성을 이동 하십시오.

MSBuild가 자동으로 픽업하여 자동 생성에 적용합니다 AssemblyInfo.cs.

또한 dotnet packVisual Studio 2017에서 UI를 사용 하거나 UI를 통해 패키지를 만들 때 너겟 패키지에도 적용됩니다 .

https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build를 참조 하십시오.


12
자동 생성을 허용하지만 솔루션 전체에서 일부 내용을 공유 할 수있는 더 많은 공감대가 필요합니다.
Dan

@ Dan Agreed, 이것은 다른 답변보다 훨씬 낮아서 대부분의 사람들이 이것을 읽지 않는다고 생각합니다.
Lunyx

1
@Justin, 프로젝트 파일 내에는 보이지 않습니다. 결과로 생성 된 조립품에 적용됩니다.
pfx

1
msbuild를 사용하지 않는 사람들은 어떻습니까?
Joe Phillips

1
이것은 좋은 대답이었습니다. 감사합니다. 일부 NuGet 패키지를 생성하는 우리의 큰 솔루션에 사용되었으며 이것은 새로운 SDK 스타일 프로젝트를위한 기존 어셈블리 정보에 대한 훌륭한 대안입니다
David Anderson

57

당신은 항상 당신의 자신의 추가 할 수 있는 AssemblyInfo.cs 편리를위한에서 온다 InternalsVisibleToAttribute, CLSCompliantAttribute자동으로 생성되지 않으며 다른 사람을.

프로젝트에 AssemblyInfo.cs 추가

  1. 솔루션 탐색기에서을 마우스 오른쪽 버튼으로 클릭하십시오 <project name> > Add > New Folder.

새 폴더 추가

  1. 폴더 이름을 "속성"으로 지정하십시오.

이름 폴더 속성

  1. 오른쪽 "속성"폴더를 클릭하고 확인을 클릭합니다 Add > New Item....

새 항목 추가

  1. "클래스"를 선택하고 이름을 "AssemblyInfo.cs"로 지정하십시오.

이름 파일 AssemblyInfo.cs

자동 생성 된 속성 억제

속성을 자동 생성하지 않고 AssemblyInfo.cs로 다시 이동 하려면 natemcmaster가 그의 답변 에서 지적한 것처럼 MSBuild에서 해당 속성을 억제 할 수 있습니다 .


1
감사합니다 NightOwl888, 이것이 내가 찾고있는 대답입니다.
Juniuz

3
요즘 모든 사람들이 Visual Studio를 가지고 있다고 가정하고,이 답변을 따르기가 어려울 수있는 다른 편집기가 있습니다 (예 : Jetbrains Rider를 사용하여 Mac / Mono에서이 작업을 수행하고 있습니다)
PandaWood

때로는 새로운 Microsoft 담당자가 AssemblyInfo.cs와 잘 작동하는 것을 유지하여 자동화 된 빌드가 여전히 빌드 번호를 수정하는 데 도움이되도록해야합니다.
justdan23

6

NightOwl888의 답변에 추가하여 한 단계 더 나아가 AssemblyInfo일반 클래스가 아닌 클래스를 추가 할 수 있습니다 .

여기에 이미지 설명을 입력하십시오


5
net2019 1.1 프로젝트에 대해 VS2019에서이 대화 상자를 열면 "어셈블리 정보 파일"이 없습니다.
SwissCoder

이것을 게시 해 주셔서 감사합니다! .NET Core 3.1을 사용하고 있으며 바로 거기에 있습니다! 모든 주요 기본 부분을 추가합니다.
justdan23

6

이 주제 / 답변을 다음과 같이 확장하고 싶습니다. 누군가 언급했듯이이 자동 생성 AssemblyInfo 는 외부 도구에 장애가 될 수 있습니다. 필자의 경우 FinalBuilder 사용 하면 빌드 작업으로 AssemblyInfo 가 업데이트되지 않는 문제가 발생했습니다 . 분명히 FinalBuilder~proj파일을 사용하여 AssemblyInfo의 위치를 찾습니다 . 나는 그것이 프로젝트 폴더의 어느 곳에서나보고 있다고 생각했다. 아뇨.

<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>

이제이 항목이 있으면 FinalBuilderAssemblyInfo의 위치를 찾고 파일을 수정합니다. action을 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'입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.