문제

여러 프로젝트에 대한 솔루션이 있습니다.하나의 솔루션 전체 어셈블리 정보 파일을 연결하여 AssemblyInfo.cs 파일을 최적화하려고 합니다.이를 수행하기 위한 모범 사례는 무엇입니까?솔루션 전체 파일에 어떤 속성이 있어야 하며 어떤 속성이 프로젝트/어셈블리와 관련되어 있습니까?


편집하다:관심이 있으시면 후속 질문이 있습니다. AssemblyVersion, AssemblyFileVersion 및 AssemblyInformationalVersion의 차이점은 무엇입니까?

도움이 되었습니까?

해결책

우리는 GlobalAssemblyInfo.cs라는 전역 파일과 AssemblyInfo.cs라는 로컬 파일을 사용하고 있습니다.전역 파일에는 다음 속성이 포함됩니다.

 [assembly: AssemblyProduct("Your Product Name")]

 [assembly: AssemblyCompany("Your Company")]
 [assembly: AssemblyCopyright("Copyright © 2008 ...")]
 [assembly: AssemblyTrademark("Your Trademark - if applicable")]

 #if DEBUG
 [assembly: AssemblyConfiguration("Debug")]
 #else
 [assembly: AssemblyConfiguration("Release")]
 #endif

 [assembly: AssemblyVersion("This is set by build process")]
 [assembly: AssemblyFileVersion("This is set by build process")]

로컬 AssemblyInfo.cs에는 다음 특성이 포함되어 있습니다.

 [assembly: AssemblyTitle("Your assembly title")]
 [assembly: AssemblyDescription("Your assembly description")]
 [assembly: AssemblyCulture("The culture - if not neutral")]

 [assembly: ComVisible(true/false)]

 // unique id per assembly
 [assembly: Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]

다음 절차를 사용하여 GlobalAssemblyInfo.cs를 추가할 수 있습니다.

  • 선택하다 항목 추가/기존... 프로젝트의 컨텍스트 메뉴에서
  • GlobalAssemblyInfo.cs를 선택합니다.
  • 오른쪽에 있는 작은 아래쪽 화살표를 클릭하여 추가 버튼을 확장합니다.
  • 버튼 드롭다운 목록에서 "링크로 추가"를 선택하세요.

다른 팁

제 경우에는 자체 프로젝트에 다양한 구성 요소가 포함된 Visual Studio 솔루션이 있는 제품을 구축하고 있습니다.공통 속성은 갑니다.솔루션에는 약 35개의 프로젝트와 다음 특성을 가진 공통 어셈블리 정보(CommonAssemblyInfo.cs)가 있습니다.

[assembly: AssemblyCompany("Company")]
[assembly: AssemblyProduct("Product Name")]
[assembly: AssemblyCopyright("Copyright © 2007 Company")]
[assembly: AssemblyTrademark("Company")]

//This shows up as Product Version in Windows Explorer
//We make this the same for all files in a particular product version. And increment it globally for all projects.
//We then use this as the Product Version in installers as well (for example built using Wix).
[assembly: AssemblyInformationalVersion("0.9.2.0")]

AssemblyTitle, AssemblyVersion 등과 같은 다른 속성은 어셈블리별로 제공됩니다.어셈블리를 빌드할 때 AssemblyInfo.cs와 CommonAssemblyInfo.cs가 모두 각 어셈블리에 빌드됩니다.이는 모든 프로젝트에 대한 몇 가지 공통 속성과 다른 프로젝트에 대한 특정 값을 원할 수 있는 두 가지 장점을 모두 제공합니다.

도움이 되길 바랍니다.

@JRoppert가 제시한 솔루션은 제가 하는 것과 거의 동일합니다.유일한 차이점은 각 어셈블리마다 다를 수 있으므로 로컬 AssemblyInfo.cs 파일에 다음 줄을 넣는 것입니다.

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
[assembly: AssemblyVersion("This is set by build process")]
[assembly: AssemblyFileVersion("This is set by build process")]
[assembly: CLSCompliant(true)]

또한 (일반적으로) 하나의 솔루션이 단일 제품 라인/출시 가능한 제품이라는 가정 하에 솔루션당 하나의 공통 어셈블리 정보를 사용합니다.공통 어셈블리 정보 파일에는 다음도 포함됩니다.

[assembly: AssemblyInformationalVersion("0.9.2.0")]

Windows 탐색기에 표시되는 "ProductVersion" 값을 설정합니다.

MSBuild 커뮤니티 작업 AssemblyInfo.cs를 생성하는 데 사용할 수 있는 AssemblyInfo라는 사용자 지정 작업이 포함되어 있습니다.사용하려면 csproj 파일을 약간 직접 편집해야 하지만 그만한 가치가 있습니다.

제 생각에는 GlobalAssemblyInfo.cs를 사용하는 것이 가치 있는 것보다 문제가 더 많습니다. 왜냐하면 기본적으로 AssemblyInfo.cs를 얻는 반면 모든 프로젝트 파일을 수정하고 모든 새 프로젝트를 수정해야 한다는 것을 기억해야 하기 때문입니다.

전역 값 변경의 경우(예:회사, 제품 등) 일반적으로 변경 사항이 너무 드물고 관리가 간단하다고 생각하지 않습니다. 마른 고려사항이 되어야 합니다.다음 MSBuild 스크립트를 실행하십시오( MSBuild 확장 팩) 모든 프로젝트의 값을 일회성으로 수동으로 변경하려는 경우:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="UpdateAssemblyInfo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <AllAssemblyInfoFiles Include="..\**\AssemblyInfo.cs" />
    </ItemGroup>

    <Import Project="MSBuild.ExtensionPack.tasks" />

  <Target Name="UpdateAssemblyInfo">
    <Message Text="%(AllAssemblyInfoFiles.FullPath)" />
    <MSBuild.ExtensionPack.Framework.AssemblyInfo 
        AssemblyInfoFiles="@(AllAssemblyInfoFiles)"
        AssemblyCompany="Company"
        AssemblyProduct="Product"
        AssemblyCopyright="Copyright"
        ... etc ...
        />
  </Target>

</Project>

여러 프로젝트 간에 파일을 공유하려면 기존 파일을 링크로 추가하면 됩니다.

이렇게 하려면 기존 파일을 추가하고 파일 선택기에서 "링크로 추가"를 클릭하세요.Add As Link
(원천: free.fr)

공유 파일에 무엇을 넣을지는 어셈블리 전체에서 공유될 항목을 넣는 것이 좋습니다.저작권, 회사, 버전 등이 있습니다.

여러 프로젝트에 단일 AseemblyInfo.cs 파일을 사용하는 것은 권장되지 않습니다.AssemblyInfo 파일에는 해당 특정 어셈블리에만 관련될 수 있는 정보가 포함되어 있습니다.가장 확실한 두 가지 정보는 다음과 같습니다. AssemblyTitle 그리고 AssemblyVersion.

더 나은 해결책은 다음과 같습니다. targets 둘 이상의 프로젝트에 어셈블리 특성을 "주입"하기 위해 MSBuild에서 처리하는 파일입니다.

내가 유용하다고 생각한 것 중 하나는 사전 빌드 단계에서 토큰 대체를 적용하여 AssemblyVersion 요소(등)를 생성하는 것입니다.

저는 TortoiseSvn을 사용하는데, 사용하기 쉽습니다. SubWCRev.exe 템플릿을 바꾸려면 AssemblyInfo.wcrev ~ 안으로 AssemblyInfo.cs.템플릿의 관련 줄은 다음과 같습니다.

[assembly: AssemblyVersion("2.3.$WCREV$.$WCMODS?1:0$$WCUNVER?1:0$")]

세 번째 요소는 개정 번호입니다.네 번째 요소를 사용하여 새 파일이나 변경된 파일을 커밋하는 것을 잊지 않았는지 확인합니다(모두 괜찮으면 네 번째 요소는 00입니다).

그건 그렇고, 추가 AssemblyInfo.wcrev 버전 관리 및 무시하다 AssemblyInfo.cs 이것을 사용한다면.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top