これは直接行うことはできませんが、手動で行うことはできます。マクロ(プロジェクト設定の変更が容易)または外部プログラム(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のコメントは注目されています。まず、これをやってはいけません。
なぜビルド出力フォルダからプログラムをロードするのですか? –
私が気づいているわけではありませんが、なぜあなたがそれを望むのか分かりません。あなたのdllが何か他のものによって使用されているなら、それはプロジェクトの出力フォルダ以外に置かれるべきです。 – Chuck