【发布时间】:2014-04-07 20:25:19
【问题描述】:
我有一个创建 DLL 的解决方案和一个将它们复制到另一个解决方案使用它们的目标文件夹的构建后 xcopy。我注意到一切似乎都很好,但实际上 xcopy 总是复制以前的版本而不是新构建的版本。 这是案例A。
更奇怪(但可能相关):当我切换到批处理文件执行 xcopy 时,构建挂起。 (B) 最后,如果我在批处理文件中使用简单的复制命令,则构建成功,但再次复制了错误的版本。 (C)
以下是拼图的部分:
案例A直接在后期构建中:
xcopy "$(ProjectDir)bin\Debug\PIC_TextBrowser.dll" "$(SolutionDir)..\ToolBox\ToolBox\bin\Debug\" /Y /I
案例 B,一个批处理文件 xcopy.bat 调用 从后期构建:
xcopy "PIC_TextBrowser.dll" "D:\P\C#13\ToolBox\ToolBox\ToolBox\bin\Debug\" /Y /I
案例 C,一个批处理文件 xcopy.bat 调用 从后期构建:
copy "PIC_TextBrowser.dll" "D:\P\C#13\ToolBox\ToolBox\ToolBox\bin\Debug\" /Y
.csproj 文件中的目标如下所示:
<Target Name="BuildPlugins">
<CSC Sources="PI_base.cs;PIC_TextBrowser.cs" TargetType="library" OutputAssembly="$(OutputPath)PIC_TextBrowser.dll" EmitDebugInformation="true" />
</Target>
<Target Name="AfterBuild" DependsOnTargets="BuildPlugins">
</Target>
<PropertyGroup>
<PostBuildEvent>call xcopy.bat
</PostBuildEvent>
看起来构建后事件并不像我想象的那样'post'。除了接受它之外,还有什么想法吗?
【问题讨论】:
-
是因为目的地不能被覆盖(正如你所说的另一个解决方案消耗它们)?
-
没有。消费程序没有运行,复制实际上发生了,但显然是在构建完成创建新版本之前。而且,是的,我已经尝试了两种构建选项(“成功时”和“创建输出后”左右;我使用的是德国版本)。当然,我总是可以构建两次,但是,嘿,这似乎不对,是吗?
-
禁用反恶意软件或进行排除,然后重试。如果是 Avast,请卸载它。
-
确实发生了,但不是新版本而是旧版本。反恶意软件怎么能做到这一点?当然这是关于正确或错误的时机..
-
根据您的
PATH,您的文件xcopy.bat和xcopy.exe之间的名称冲突可能是个问题。重命名您的.bat文件并添加 echo 语句以查看发生了什么以及工作目录是什么。使用完整的文件路径来确保您的脚本确实复制了预期的文件。
标签: c# batch-file dll xcopy post-build-event