나는 .cab 파일에 포함 된 파일의 버전 번호를 얻을 수있는 작은 응용 프로그램을 작성했습니다. 다음과 같이수 없습니다 파일 (.exe)
나는 버전 번호를 모든 파일을 임시 디렉토리 및 루프에 택시에서 모든 파일을 추출하고 검색 :
다음//Attempt to load .net assembly to retrieve information
Assembly assembly = Assembly.LoadFile(tempDir + @"\" + renameTo);
Version version = assembly.GetName().Version;
DataRow dr = dt.NewRow();
dr["Product"] = renameTo;
dr["Version"] = version.ToString();
dt.Rows.Add(dr);
내가 같이 추출 된 모든 파일을 삭제할 완료되면 다음과 같습니다 :
foreach (string filePath in filePaths)
{
//Remove read-only attribute if set
FileAttributes attributes = File.GetAttributes(filePath);
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
File.SetAttributes(filePath, attributes^FileAttributes.ReadOnly);
}
File.Delete(filePath);
}
이 파일은 .net .exe 파일을 제외하고 모든 파일에서 작동합니다. 파일을 수동으로 삭제할 수 있으므로 잠긴 것처럼 보이지 않습니다.
나는이 일을 할 수 찾고해야합니까? Assembly.LoadFile이 아마도 파일을 잠그고 있습니까?
당신이'Assembly.LoadReflectionOnlyFrom (문자열 경로)'사용하는 경우? 어쨌든 그 이상을 필요로하지 않는 것 같습니다. – Jay
AppDomain에서 어셈블리를 언로드 할 수는 없지만 AppDomain을 언로드 할 수는 있습니다. Assembly.Load 실제로 어셈블리를 고정하는 경우에 따라서, 당신은 새로운 응용 프로그램 도메인'var에 MYDOMAIN는 = AppDomain.CreateDomain는 ("MYDOMAIN")가', 그 안에 모든 어셈블리를로드와의 AppDomain.Unload'와 응용 프로그램 도메인을 언로드를 만들 수 있습니다 (myDomain)'입니다. –
@Jay - 아니요, 여전히 AppDomain을 언로드해야합니다 (http://msdn.microsoft).com/ko-en/us/library/h55she1h –