アセンブリを生成していますか?私は生成された.dll
を見つけることができないことを除いて、同じ問題を抱えています。最初にフォルダに書き込めないと思われたので、今度はCreateDirectory
を呼び出し、フォルダが書き込み可能であることを示すテキストファイルをドロップします。
とにかく、同じ問題、成功しません。誰もこの問題を抱えていないのは本当ですか?私はMicrosoftののPDBをステップ実行することができた場合、サーバー&が見リモートデバッグに行くよ
...
- EDIT -
Microsoftのコードをステップ実行する必要はありません。私はCompilerResultsのErrorsコレクションを見て、そこに1つのアイテムがあります: "メタデータファイル 'c:\ Windows \ System32 \ aaclient.dll'を開くことができませんでした - '間違ったフォーマット「」
私は...それはWindowsのSystem32ディレクトリをusignだ他のDLLをピックアップしDirectory.GetCurrentDirectoryを()を取得すると
- 。
を追加することでこれを解決 - EDIT実行アセンブリのフォルダからの参照:
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());
堅牢性を高めるには、有効なマネージコードアセンブリであるバイナリのチェックを追加する必要があります。このコードはでも、2つのGetFiles呼び出しの間にLinq.Unionを使用して短縮することができます。
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;
}
}