2012-07-22 2 views
2

WPF forms과 함께 .exe을 새로 만듭니다. 문제는 일부 어셈블리를 참조해야한다는 것입니다.CodeDom ReferencedAssemblies 절대 경로

이 내가 추가하는 방법입니다 : 이것은 잘 작동,하지만 당신은 그들이 있기 때문에 오류가 발생합니다, 다른 내가 Windowsbase.dll, PresentationCore.dllPresentationFrameWork.dll에 대한 절대 경로를 입력 할 필요가 있음을 알 수

var p = new CompilerParameters 
{ 
    GenerateExecutable = true, 
    TreatWarningsAsErrors = false, 
    CompilerOptions = "/t:winexe", 
    IncludeDebugInformation = false, 
    OutputAssembly = dlg.FileName, 
}; 


string[] assemblies = { 
    "System", "System.Core", "System.Data", "mscorlib", 
    "System.Drawing", "System.Windows.Forms", "Microsoft.CSharp", 
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase", 
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore", 
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFrameWork" 
}; 

foreach (string a in assemblies) 
{ 
    p.ReferencedAssemblies.Add(a + ".dll"); 
} 

찾을 수 없습니다. 이것은 모든 컴퓨터에서 작동하지 않을 수 있습니다.

어떻게해야합니까?

(프로젝트 폴더에 3 .dll을 포함 시켜서 응용 프로그램과 함께 제공하고 상대 경로를 참조 할 수 있다고 생각합니다. (작동한다면 지금 테스트 할 수 없습니다.)하지만 다른 방법이 있습니다. ?)

+0

이 어셈블리가 GAC에 등록되어 있습니까? 그것이 다른 방법으로는 발견되지 않는 이유 일 수 있습니다. –

+0

GAC는 무엇을 의미합니까? VS 또는 .NET Framework에서 아무 것도 변경하지 않았습니다. – Mek

답변

0

GAC (Global Assembly Cache)에 문제가있는 어셈블리가 등록되어 있는지 확인해야합니다. 절대 경로가 제공되지 않을 때 응용 프로그램에서 결국 문제가있는 어셈블리를 찾습니다.

C:\Windows\Assembly (Windows 설치 디렉토리가 C:\Windows이라고 가정)을 검색하여 GAC에 등록 된 어셈블리를 확인할 수 있습니다. WindowsBase 문제 과거를 얻을 것이다

typeof(System.Windows.Point).Assembly.Location 

: 속임수

+0

GAC에서는 이러한 .dll이 기본값이 아니기 때문에 일부 사람들과 프로젝트를 공유하므로 GAC와 같이 많이 변경해야합니다. – Mek

+0

@Mek 이러한 어셈블리는 최신 .NET Framework가 설치된 컴퓨터의 경우 GAC에 있어야합니다. 컴퓨터에 설치되어 있지 않다는 것은 설치되어 있지 않거나 설치가 손상되었다는 것을 의미합니다. –

+0

2 대의 PC와 최신 업데이트 + .NET Framework가 설치된 VM에서 테스트 한 결과 작동하지 않았습니다. – Mek

1

한 가지 방법은 프로젝트에서 그 DLL을 참조하는 경우, 당신은 다음과 같은 작업을 수행 할 수 있습니다.