어셈블리를 생성 하시겠습니까? 나는 생성 된 .dll
을 찾을 수 없다는 것을 제외하면 같은 문제가있다. 처음에는 폴더에 쓸 수 없다고 의심되어 이제 CreateDirectory
을 호출하고 폴더가 쓰기 가능하다는 것을 보여주는 텍스트 파일을 삭제합니다.
어쨌든, 동일한 문제, 성공하지 못했습니다. 아무도이 문제를 안고있는 건가요? 나는 마이크로 소프트의 PDB의 단계별로 할 수있는 경우 서버 & 볼 원격 디버깅거야
...
- 편집 -
마이크로 소프트의 코드를 단계별 필요가 없습니다. 나는 CompilerResults의 Errors 콜렉션을 살펴 보았는데 거기에 1 개의 아이템이있다 : "메타 데이터 파일 'c : \ Windows \ System32 \ aaclient.dll'을 열 수 없다 - '다음과 같은 프로그램을로드하려고 시도했다. 잘못된 형식 ' "
나는 ... 그것은 윈도우 System32 디렉터리를 usign의 다른 DLL을 데리러 Directory.GetCurrentDirectory()를 얻을 때
-.
추가하여이 문제를 해결 - 편집 실행중인 어셈블리 폴더의 참조 :
CompilerParameters compilerParameters = new CompilerParameters
{
OutputAssembly = Path.Combine(GeneratedAssembliesFolder, string.Format("{0}.Generated.dll", typeName))
};
string executingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string[] dllFiles = Directory.GetFiles(executingDirectory, "*.dll");
compilerParameters.ReferencedAssemblies.AddRange(dllFiles.Select(f => Path.Combine(executingDirectory, f)).ToArray());
IEnumerable<string> exeFiles =Directory.GetFiles(executingDirectory, "*.exe").Where(f => !f.Contains(".vshost."));
compilerParameters.ReferencedAssemblies.AddRange(exeFiles.Select(f => Path.Combine(executingDirectory, f)).ToArray());
더 강력하려면 하나의 유효한 관리 코드 어셈블리 인 바이너리에 대한 검사를 추가해야합니다. 이 코드 은도 두 GetFiles 호출 사이에 Linq. 유니온을 사용하여 단축 될 수 있습니다.
private static string generatedAssembliesFolder;
private static string GeneratedAssembliesFolder
{
get
{
if (generatedAssembliesFolder == null)
{
string[] candidateFolders = new[]
{
Environment.GetEnvironmentVariable("TEMP", EnvironmentVariableTarget.Process),
Environment.GetEnvironmentVariable("TMP", EnvironmentVariableTarget.Process),
Environment.GetEnvironmentVariable("TEMP", EnvironmentVariableTarget.User),
Environment.GetEnvironmentVariable("TMP", EnvironmentVariableTarget.User),
Environment.GetEnvironmentVariable("TEMP", EnvironmentVariableTarget.Machine),
Environment.GetEnvironmentVariable("TMP", EnvironmentVariableTarget.Machine),
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
};
foreach (string candidateFolder in candidateFolders)
{
try
{
if (!Directory.Exists(candidateFolder)) Directory.CreateDirectory(candidateFolder);
string testFileName = Path.Combine(candidateFolder, Path.GetRandomFileName());
File.WriteAllBytes(testFileName, new byte[0]);
File.Delete(testFileName);
}
catch (Exception ex)
{
continue;
}
generatedAssembliesFolder = candidateFolder;
break;
}
}
return generatedAssembliesFolder;
}
}