2012-05-08 4 views
3

AssemblyInfo.cs 파일에서 버전 번호를 추출하려고합니다! 그리고 난 사용하려고합니다 System.Reflection.Assembly.LoadFile(path);하지만 이것을하는 동안 BadImageFormatException을 얻습니다. "모듈에 어셈블리 매니페스트가 포함될 것으로 예상됩니다 (HRESULT의 예외 : 0x80131018).". 그래서 지금 나는 창립자가 될 수있는 방법이 아닌가? RegEx를 대신 사용해야합니까?AssemblyInfo.cs 파일에서 버전 번호를 읽는 중

많은 예제를 GetExecutingAssembly()으로 읽었지만 다른 프로젝트의 버전을 얻고 싶습니다.

설명 : 버전 정보를 AssemblyInfo.cs 파일에서 읽고 싶습니다. 그리고 가 아니라에서 컴파일 된 파일입니다. 새 버전을 만들기 전에 버전 번호를 업데이트하는 도구를 만들려고합니다.

+0

.net 어셈블리를로드하고 있으며 어셈블리가 주어진 경로에 있습니까? – Deepesh

+2

Hehe, 먼저 컴파일하면 Assembly.Load()를 사용할 수 있습니다. AssemblyInfo.cs 파일을 실제로 파고 싶다면 텍스트 파서를 작성하십시오. –

답변

4

당신은 그것을 get Assembly version without loading

string path = @"d:\AssemblyInfo.cs"; 
      if (File.Exists(path)) 
      { 
       // Open the file to read from. 
       string[] readText = File.ReadAllLines(path); 
       var versionInfoLines = readText.Where(t => t.Contains("[assembly: AssemblyVersion")); 
       foreach (string item in versionInfoLines) 
       { 
        string version = item.Substring(item.IndexOf('(') + 2, item.LastIndexOf(')') - item.IndexOf('(') - 3);   
        //Console.WriteLine(Regex.Replace(version, @"\P{S}", string.Empty)); 
        Console.WriteLine(version); 
       } 

      } 

// 출력

1.0.* 
1.0.0.0 

희망 도움말 ...

+0

'[어셈블리 : 어셈블리 버전] (즉, 공간이 제거됨) – tomfanning

3

당신은 당신이 64 환경에서 x86 용 컴파일 된 어셈블리를로드하려고하거나 그 반대의있는 것 같습니다 AssemblyName.GetAssemblyName

AssemblyName.GetAssemblyName("ProjectB.exe").Version 
0

에서 대상 어셈블리의 경로를 지정할 수 있습니다.

이 코드가 상주하는 어셈블리가 대상과 동일한 환경에 맞게 만들어 졌는지 확인하고 읽은 것처럼 들리는 예제를 통해 얻을 수 있습니다. 당신은 다음과 같이 그것을 할 수있는 파일을 읽고 싶다면 :

using System.Reflection; 
using System.IO; 

... 

// Get assembly 
AssemblyName currentAssembly = AssemblyName.GetAssemblyName(path); 
Version assemblyVersion = currentAssembly.Version; 

편집 :

+0

아니요 AssemblyInfo.cs 파일에서 버전 정보를 보지 않았습니다. 컴파일 된 파일이 아닙니다. 필자는 그 방법을 사용하여 파일을 읽거나 컴파일 된 파일 만 읽을 수 있는지 알고 싶었습니다. – Markus

+1

그리고 한스 패전트 (Hans Passant)는 그의 말을 듣고 죽었다. 원시 텍스트를 파싱 할 필요가있다. –

관련 문제