2008-10-16 2 views
9

Visual Studio 2008 (및 기타)에서는 프로젝트 속성을 볼 때 .NET 또는 Silverlight 응용 프로그램을 만들 때 모든 구성에서 하나의 어셈블리 이름 만 가질 수있는 것처럼 보입니다. 디버그 모드 단지 MyApp를 - - 릴리스 모드에서이 가능한 경우다른 구성에 다른 어셈블리 이름을 사용하는 방법은 무엇입니까?

사람이 알고 있나요

MyAppDebug : I는 내 응용 프로그램을 컴파일 하시겠습니까?

편집 :

어떤 사람들은 질문 뒤에 추론에 의문을 제기하는 것, 그래서 나는 조금 더 설명 할 것이다 :

을 나는 자동으로 업로드됩니다 Silverlight 응용 프로그램에서 일하고 있어요 우리의 테스트 사이트에서 "솔루션 빌드"를 할 때. 문제는 테스트 팀이 현재 온라인 버전을 테스트하는 중이고, 새로운 버전을 개발하는 것입니다. 그래서, QA 팀이 테스트 할 일반 버전에 대해 \ MyApp.html과 같은 URL을 갖고 싶습니다. 그리고 현재 작업중인 현재 버전에 대해 \ MyApp.html? version = debug를 디버그합니다.

답변

1

난 후 빌드 스크립트를 사용하여 후에 무슨 달성하기 위해 관리했습니다 :

if "$(ConfigurationName)"=="Debug" goto debug 
"$(SolutionDir)ftp.bat" "$(TargetDir)$(TargetName).xap" 
:debug 
"$(SolutionDir)ftp.bat" "$(TargetDir)$(TargetName).xap" "$(TargetDir)$(TargetName)Debug.xap" 

내 FTP 스크립트는 기본적으로 파일을 업로드하는 것입니다 끝에서 선택적 매개 변수를 받아들입니다. 따라서 로컬 시스템에서 파일 이름은 항상 같지만 디버그 모드에서는 파일 이름 끝에 "Debug"를 사용하여 업로드합니다. 이제 웹 페이지에서 어떤 버전을 표시할지 선택할 수 있습니다.

+1

대신 다른 폴더를 사용하지 않는 이유는 무엇입니까? – mbx

3

확실히 빌드 후 이벤트를 추가하여 어셈블리의 이름을 바꿀 수 있습니다. 솔루션에 어셈블리가 하나만있는 경우이 방법이 유용합니다.

그러나 솔루션이 여러 프로젝트로 구성된 경우 일반적으로 다른 문제로 생성 된 어셈블리를 참조하는 프로젝트가 하나 있습니다. 솔루션에 두 개의 프로젝트가 있다고 상상해보십시오. 첫 번째 프로젝트는 두 번째 프로젝트 (MyData.DLL)에서 생성 된 어셈블리를 참조하는 Windows Forms exe (MyApp.EXE)를 만듭니다.

이 예제에서 디버그 EXE의 이름은 MyAppDebug.EXE이며 MyDataDebug.EXE를 참조해야합니다. 그리고 이것은 post-build 이벤트에서 이름을 바꿀 때 작동하지 않습니다.

따라서 이름을 바꾸지 않는 것이 좋습니다. 당신이 절대적으로 당신의 마음이 일에 설정 한 경우

+2

빌드 후 이름 바꾸기에 또 다른 문제점이 있습니다. 많은 디버거 통합이 손실됩니다. 기본적으로 프로그램을 직접 실행 한 다음 디버거를 연결해야합니다. –

2

, 당신은 당신의 AssemblyInfo.cs 파일에서 이런 일을 할 수있는 :

#if DEBUG 
[assembly: AssemblyTitle("MyAssemblyDebug")] 
#else 
[assembly: AssemblyTitle("MyAssembly")] 
#endif 

그러나이 거의 해킹입니다. 또한 MSDN 설명서는 조립품을로드 할 때 파일 이름이 고려되지 않았기 때문에 간단한 이름 바꾸기가 어셈블리의 전체 ID를 변경하지 않는다고 분명합니다.

위에서 언급했듯이 일반적으로 혼란과 유지 관리 문제가 발생하기 때문에 일반적으로 나쁜 생각입니다. 당신이 할 모든 포스트 빌드 작업을 수행하여 파일의 이름을 변경하는 경우 : SomeAssemblyDebug.dll 다음

이름을 "디버그 \ SomeAssembly.dll \ $ (PROJECTDIR) 빈"당신의 천국 ' 어셈블리의 신원을 파일 이름 만 변경했습니다. Bob.dll의 이름을 지정할 수 있으며 CLR과 관련하여 여전히 동일한 ID를 갖습니다. 이 문제는 GAC에 배포 할 강력한 어셈블리를 사용할 때만 중요합니다. 이 경우 에는에 어셈블리 이름과 다른 파일 이름을 사용할 수 없습니다.

파일 이름뿐 아니라 어셈블리 이름의 이름을 바꾸려면 CLR과 완전히 다른 어셈블리이므로 다른 문제가 있습니다.

나는 당신이 이미 자리에있는 표준을 가지고 사는 것이 낫다고 생각합니다. 정말로 이상한 일을해야한다는 것을 알게된다면 아마 왜 그렇게하려고하는지 스스로에게 물어봐야 할 것입니다. 더 나은 해결책이있을 수 있습니다.

10

필자는 .csproj 파일을 사용하여이 작업을 수행했습니다. 속성을 구성 별 속성 그룹으로 이동하거나 Condition 만 사용하십시오. 예 :이 같은 .csproj 덤비는 시작할 때

<AssemblyName>MyApp</AssemblyName> 
<AssemblyName Condition=" '$(Configuration)' == 'Debug' ">MyAppDebug</AssemblyName> 

비주얼 스튜디오는 다소 절름발이가된다 - 예를 들어 내가 할 수있는 더 이상 F5/디버그 모드에서 프로젝트를 실행하려면 F10; 없다 "MyApp.exe"가 발견되지 않았습니다. 즉, 디버거가 잘못된 AssemblyName으로 어셈블리를 시작하려고 시도합니다.

+1

Untested하지만 제 1 줄을 두 번째 줄의 반대 조건으로 만들면 디버그 문제가 사라질 수도 있습니다. Visual Studio는 아마도 먼저 작동하는 첫 번째 어셈블리를 찾으면 AssemblyName에 대한 구문 분석을 중지합니다. –

+1

나는 CAD 녀석의 가설을 테스트했으며 정확히 맞습니다. 순서 바꾸기 (또는 더 일반적으로 조건문을 먼저 쓰면) 'MyApp.exe'찾을 수없는 오류가 수정됩니다. Visual Studio에서 유효한 AssemblyName을 찾으면 이후의 모든 것을 무시합니다. – eskimwier

관련 문제