2011-02-02 16 views
1
  1. は、私は解決策を構築し、私はMyProject.dllはファイルを取得Visual Studio 2008:DLLファイルが使用されている場合、DLLファイルの名前を変更するにはどうすればよいですか?

  2. MyProjectのプロジェクトを持っています。

  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.

が、私はこのケースでは働かを持っていますが、私の.dllファイルが別のプログラムによって使用されている場合、Visual StudioはMyProject1(2を生成する必要があること、 3 ..).dll?

+0

なぜビルド出力フォルダからプログラムをロードするのですか? –

+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のコメントは注目されています。まず、これをやってはいけません。

関連する問題