문제

해결할 수 있는지 모르는 질문이 있습니다. Visual Studio 2005에 하나의 C# 프로젝트가 있으며 사전 처리기 상수에 따라 다른 DLL 이름을 만들고 싶습니다. 이 순간에 내가 가진 것은 사전 처리기 상수, 2 개의 SNK 파일 및 2 개의 어셈블리 가이드입니다. 또한 두 개의 구성 (디버그 및 디버그 프리 프로세서)을 생성하고 SNK 및 Guidate를 사용하여 완벽하게 컴파일합니다.

#if PREPROCESSOR_CONSTANT
[assembly: AssemblyTitle("MyLibraryConstant")]
[assembly: AssemblyProduct("MyLibraryConstant")]
#else
[assembly: AssemblyTitle("MyLibrary")]
[assembly: AssemblyProduct("MyLibrary")]
#endif

이제 두 어셈블리를 GAC에 넣어야합니다. 첫 번째 어셈블리는 문제없이 추가되지만 두 번째 어셈블리는 그렇지 않습니다.

하나의 Visual Studio 프로젝트에서 둘 이상의 다른 어셈블리를 만들려면 어떻게해야합니까?

사전 처리기 상수에 따라 DLL 이름을 변경하기 위해 "AssemblyInfo.cs"에 새 라인을 포함하는 것을 잊어 버렸을 수도 있습니까?

도움이 되었습니까?

해결책

빌드 후 이벤트는 다음과 같습니다.

if "$(ConfigurationName)" == "Debug" goto Debug
if "$(ConfigurationName)" == "Release" goto Release

goto End

:Debug
del "$(TargetDir)DebugOutput.dll"
rename "$(TargetPath)" "DebugOutput.dll"

:Release
del "$(TargetDir)ReleaseOutput.dll"
rename "$(TargetPath)" "ReleaseOutput.dll"

:End

변화 DebugOutput.dll 그리고 ReleaseOutput.dll 적절한 파일 이름에. 당신은 변경할 수 있습니다 "Debug" 그리고 "Release" 다른 구성을 지원하고 더 많은 구성을 지원하기 위해 섹션을 추가하십시오.


이 스크립트는 파일 이름이 다른 두 개의 DLL을 만듭니다. 두 가지 다른 어셈블리 이름을 만들려면 두 가지 옵션이 있습니다.

어셈블리 이름은 다음과 같이 제작되었습니다 다음:

Name <,Culture = CultureInfo> <,Version = Major.Minor.Build.Revision> <, StrongName> <,PublicKeyToken> '\0'

따라서 문화 정보, 버전 또는 강한 이름을 변경해야합니다.

가장 간단한 두 가지 옵션은 다음과 같습니다.

  1. 어셈블리 버전 변경 :

    #if SOME_COMPILER_SYMBOL
    [assembly: AssemblyVersion("1.0.0.0")]
    #else
    [assembly: AssemblyVersion("1.0.0.1")]
    #endif
    
  2. 키 파일 변경 - 두 개의 키 파일 생성 sn 도구 및에서 AssemblyInfo.cs:

    #if SOME_COMPILER_SYMBOL
    [assembly: AssemblyKeyFile("FirstKey.snk")]
    #else
    [assembly: AssemblyKeyFile("SecondKey.snk")]
    #endif
    

이 두 가지 옵션은 GAC가 알고있는 한 두 개의 다른 어셈블리를 초래할 것입니다. '단순한'이름이 아닌 전체 어셈블리 이름을 비교하기 때문입니다.

다른 팁

Visual Studio는 구성당 출력 파일 이름을 허용하지 않습니다. 그러나 빌드 스크립트의 일부로 출력 파일의 이름을 바꿀 수 있습니다. 해당 특정 프로젝트에 대한 MSBuild 스크립트 에서이 작업을 수행 할 수 있습니다.

예를 들어, 이것을 당신의 끝에 두십시오. .csproj 파일:

<Target Name="AfterBuild">
    <Copy SourceFiles="$(OutputPath)\YourAssembly.dll" DestinationFiles="$(OutputPath)\YourAssemblyRenamed.dll"/>
    <Delete Files="$(OutputPath)\YourAssembly.dll"/>
</Target>

나는 이것을 직접 시도하지 않았으므로 친절한 제안으로 받아들입니다. .csproj를 수동으로 편집 해보십시오.

<Target Name="BeforeBuild">
    <AssemblyName Condition="'$(Configuration)' == 'Release'">MyReleaseName</AssemblyName>
    <AssemblyName Condition="'$(Configuration)' == 'Debug'">MyDebugName</AssemblyName>
</Target>

나는 그런 방법이 없다고 생각합니다. 출력 어셈블리 이름은 프로젝트 설정으로 엄격하게 고정되어 있습니다. 하나의 프로젝트 당 하나의 어셈블리.

또한 주어진 어셈블리 attributes는 파일 이름이 아닌 가시 어셈블리 속성 (예 : Windows Explorer)을 나타냅니다.

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