2011-02-02 1 views
1
  1. 은 내가 솔루션을 구축하고 나는 MyProject.dll 파일을 가져 프로젝트 MyProject를Visual Studio 2008 : 사용중인 dll 파일의 이름을 어떻게 바꿀 수 있습니까?

  2. 있습니다.

  3. 일부 프로그램에서 파일을로드합니다.

  4. 나는 내 솔루션을 약간 변경하고 빌드 버튼을 누르십시오. 나는이 오류가 나타납니다

Unable to copy file ".dll" to "bin\Debug\.dll". The process cannot access the file 'bin\Debug\.dll' because it is being used by another process.

내가이 경우에있는 posibility이 있습니까을 내 .dll 파일이 다른 프로그램에서 사용하는 경우, 비주얼 스튜디오는 MyProject1 (2을 생성해야, 3 ..) .dll?

+0

왜 프로그램을 빌드 출력 폴더에서 dll로드할까요? –

+0

잘 모르겠지만, 왜 그렇게하고 싶은지 확신 할 수 없습니다. dll이 다른 용도로 사용된다면 프로젝트의 출력 폴더가 아닌 다른 곳에 위치해야합니다. – Chuck

답변

0

이 작업은 직접 수행 할 수 없지만 수동으로 수행 할 수 있습니다. 매크로 (프로젝트 설정을 변경하는 것이 더 쉽다) 또는 외부 프로그램 (vcproj를 텍스트 또는 xml로 수정해야 함)으로 만들 수 있습니다. 외부의 C++ 구현쪽으로 생각이 기울고 의사 코드는 :

bool CanWriteDll(dll) 
{ 
    return FileOutputStream(dll).is_open(); 
} 

void BuildProject(proj) 
{ 
    LaunchProcess("devenv /Build " + proj); //or "msbuild ..." if you will 
} 

string FindUniqueName(dll) 
{ 
    string name = Path(dll).NameWithoutExtension(); 
    string ext = Path(dll).Extension(); 
    string newname; 
    int i = 1; 
    for(; ;) 
    { 
    newname = name + ToString(i++) + ext; 
    if(!FileExists(newname)) 
     return newname; 
    } 
} 

void ModifyTargetName(proj, newName) 
{ 
    Xml xml = OpenXmlFile(proj); 
    XmlNode node = xml.FindNode("Tool.VCLinkerTool.OutputFile"); 
    node.SetValue("$(OutDir)\" + newName); 
    xml.WriteFile(); 
} 

    //main code 
if(!CanWriteDll(dll)) 
    ModifyTargetName(proj, FindUniqueName(dll)); 
BuildProject(project); 

이 떨어져 과정은 당신이 DLL을 사용하여 응용 프로그램을 다시 시작하고 지금 MyProject1.dll를 사용하도록 지시해야하는 문제를 떠난다. 어쨌든 응용 프로그램을 닫아야하는 경우 먼저 닫은 다음 dll을 작성한 다음 다시여십시오. 다른 말로하면, Fredrik와 Chuck의 의견은 확실합니다 : 아마도 처음부터 이것을해서는 안됩니다.

관련 문제