天道酬勤,学无止境

用于发布的构建后事件命令 (Visual Studio 2010)(Post-build event command for publish (Visual Studio 2010))

问题

我在 Visual Studio 2010 中有一个项目。该项目具有以下构建后事件命令行:

SET TARGET_PROJECT=TestMain
IF NOT EXIST "$(TargetDir)IceBox" (
  XCOPY /E /I /Y "$(SolutionDir)Externals\IceBox" "$(TargetDir)IceBox"
)
IF NOT EXIST "$(TargetDir)bzip2.dll" (
  COPY "$(SolutionDir)Externals\IceBox\bzip2.dll" "$(TargetDir)"
)
XCOPY /E /I /Y "$(SolutionDir)Externals\Infragistics" "$(TargetDir)"

但是这个命令只在我创建调试或发布时使用。 当我发布我的项目时,这个命令会被忽略。 是否可以在我发布项目时使用此命令?

谢谢你的帮助。

回答1

我最近遇到了类似的问题。 我想“仅”在发布应用程序时运行命令,而不是在每次构建时运行。

我添加了一个发布发布任务。 由于我不直接使用 MSBuild,因此我修改了我的解决方案 csproj 文件。

例子:

解决方案名称: MyKillerApp

项目文件名: MyKillerApp.csproj

使用 Notepad++ 或其他文本编辑器打开文件并导航到文件末尾并找到此部分(应该几乎在末尾):

  <PropertyGroup>
    <PreBuildEvent>
    </PreBuildEvent>
  </PropertyGroup>

然后添加您的发布后任务

  <PropertyGroup>
    <PreBuildEvent>
    </PreBuildEvent>
  </PropertyGroup>
  <Target Name="AfterPublish">
    <Exec Command="..\..\Documentation\DoxyGenExe\createDocs.bat" />
  </Target>

我的任务运行一个 bat 文件,该文件运行 Doxygen(一个非常好的文档创建程序)和一些其他任务。

可以创建一个bat文件来运行任何命令,非常方便

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何运行Visual Studio生成后事件仅用于调试生成(How to run Visual Studio post-build events for debug build only)
    问题 如何将构建后事件限制为仅针对一种构建类型运行? 我正在使用事件将DLL文件复制到本地IIS虚拟目录中,但是我不希望这种情况在发布模式下的生成服务器上发生。 回答1 生成前和生成后事件作为批处理脚本运行。 您可以在$(ConfigurationName)上执行条件语句。 例如 if $(ConfigurationName) == Debug xcopy something somewhere 回答2 仅供参考,您不需要使用goto。 shell IF命令可与圆括号一起使用: if $(ConfigurationName) == Debug ( copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y ) ELSE ( echo "why, Microsoft, why". ) 回答3 像平常一样添加您的发布构建事件。 然后保存您的项目,在记事本(或您喜欢的编辑器)中将其打开,然后将条件添加到PostBuildEvent属性组中。 这是一个例子: <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <PostBuildEvent>start gpedit<
  • 如何修复构建后事件中的MSB3073错误?(How do I fix MSB3073 error in my post-build event?)
    问题 我正在一个项目上,该项目要求将通过构建解决方案生成的DLL从bin文件夹复制到另一个文件夹,这两个文件夹都在我的计算机上的C驱动器中。 我编写了一个使用xcopy来完成此操作的批处理文件,您可以在这里看到它: xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.dll" "C:\inetpub\wwwroot\AppServer\bin\" xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.pdb" "C:\inetpub\wwwroot\AppServer\bin\" 现在,我尝试了此文件的许多迭代,该文件位于: C:\Users\scogan\Desktop\CopyFiles.bat 所以我的构建后事件命令行看起来像这样: call C:\Users\scogan\Desktop\CopyFiles.bat 我已经在桌面上的文件夹中单独运行了该批处理文件和两个文本文件,并且运行正常。 我也使用它自己复制的文件来运行它
  • Visual Studio Post-Build 事件调用带有空格的参数的批处理文件(Visual Studio Post-Build events calling batch files with arguments that have spaces)
    问题 有人知道怎么做吗? 我有一个 .bat 脚本,我希望能够从命令行以及 Visual Studio 中的构建后脚本使用它。 该脚本采用参数,其中一些可以包含空格。 .bat 脚本的路径可以包含空格,最好表示为相对于 $(SolutionDir) 的路径。 我已经尝试过似乎有一百种命令行变体,它们具有不同的封闭引号和转义字符组合,包括: "$(SolutionDir)myScript.bat" "$(SolutionDir)\" "$(Platform)" "$(Configuration)" call "$(SolutionDir)myScript.bat" "$(SolutionDir)" "$(Platform)" "$(Configuration)" cmd /c ""$(SolutionDir)myScript.bat" "$(SolutionDir)" "$(Platform)" "$(Configuration)"" 但是它们都会产生错误,我找不到有效的组合,而是通常会收到此错误: "[path-to-script] is not recognized as an internal or external command, operable program or batch file" 从构建后步骤调用它的正确语法是什么? 我在将其设置为外部工具时也遇到了类似的问题
  • 我们可以在Visual Studio的发布后事件命令行中执行.bat文件吗?(Can we execute a .bat file in post build event command line in visual studio?)
    问题 我们可以在Visual Studio的发布后事件命令行中执行.bat文件吗? 回答1 当然,这是一个例子: call "$(SolutionDir)scripts\copyifnewer.bat" "$(SolutionDir)libs\RLPL.Services.CertificateValidator.Basic.dll" "$(TargetDir)RLPL.Services.CertificateValidator.Basic.dll" call "$(SolutionDir)scripts\copyifnewer.bat" "$(SolutionDir)libs\RLPL.Services.CertificateValidator.Common.dll" "$(TargetDir)RLPL.Services.CertificateValidator.Common.dll" 请注意您可能遇到的两个可能的问题: 包含的双引号(请参阅每个部分如何被"符号包围) 如果要调用2个或多个批处理文件,请确保使用call命令,否则将很难找到第二个蝙蝠为何不执行其工作的原因 回答2 是的,通过在构建后事件编辑器中添加对它的调用。 如果转到项目的“属性”页面,则应选择“构建事件”选项卡。 您可以在“构建后事件”命令行文本框中键入对批处理文件的调用。
  • VS2010:如果在构建后事件中,我们可以有多个吗?(VS2010: Can we have multiple if in post-build event?)
    问题 我们可以有这样的事情: if "Debug"=="$(ConfigurationName)" ( goto :nocopy ) else if "Release"=="$(ConfigurationName)" ( del "$(TargetPath).config" copy "$(ProjectDir)\App.Release.config" "$(TargetPath).config" ) else if "ReleaseBeta"=="$(ConfigurationName)" ( del "$(TargetPath).config" copy "$(ProjectDir)\App.ReleaseBeta.config" "$(TargetPath).config" ) else if "ReleaseProduction"=="$(ConfigurationName)" ( del "$(TargetPath).config" copy "$(ProjectDir)\App.ReleaseProduction.config" "$(TargetPath).config" ) :nocopy 我试过了,但它不起作用。 错误代码是 255。 回答1 您可以根据需要使用任意数量的条件语句,只需将它们用新行分隔并丢失 else 所以改变 if "Debug"=="$
  • VS2010:如何在构建后使用环境变量(VS2010: How to use Environment Variables in Post-Build)
    问题 在我的 PC 上,我创建了一个名为3DSMaxInstallDirectory的系统环境变量 在命令行,如果我给 echo %3DSMaxInstallDirectory%Plugins\ 我得到 D:\Program Files\Autodesk\3ds Max 2011\Plugins\ 在 Visual Studio 中,我进入 Post-Build 部分 copy "$(TargetDir)$(TargetName).*" "$(3DSMaxInstallDirectory)Plugins\" 但是在构建时我得到 Error 4 The command "copy "C:\Users\Sebastian\Documents\Visual Studio 2010\Projects\MaxBridge\MaxBridgeImporterPlugin\bin\Debug\MaxBridgePlugin.*" "Plugins\" " exited with code 1. MaxBridgeImporterPlugin 在 Google 上的结果是一个令人困惑的混合建议,即 Visual Studio 不支持 EV,Visual Studio 确实支持 EV,Visual Studio 需要 %..% 并且 Visual Studio 需要 $(..) -
  • 在 Visual Studio 中继承构建后事件?(Inherit Post-Build-Event in Visual Studio?)
    问题 我在 Visual Studio 中有一个解决方案,其中我有一个共享属性表,其中包含需要为每个项目执行的构建后事件命令 ( bar )。 Foo.props > Common Properties > Build Events > Post-Build Event > Command Line = bar 然后如何指定其他特定于项目的构建后事件? 缺少通常的“从父项或项目默认值继承”,我宁愿不必手动将bar添加到每个项目,因为它很难维护。 回答1 根据这篇文章,这似乎不可能。 您不久前发布了您的问题; 您是否设法找到了可行的替代方案? 反馈后编辑:一个潜在的混乱替代方法是将您的命令定义为宏: <!-- CommandX.props --> <PropertyGroup> <CommandX>bar</CommandX> </PropertyGroup> 然后您可以将$(CommandX)添加到项目的构建后命令或另一个属性表。 如果$(CommandX)不存在,它会被悄悄地忽略。 如果将此宏添加到另一个属性表,则必须Import CommandX属性表,以便$(CommandX)继承一个值: <!-- Some-Other-Property-Sheet.props --> <ImportGroup Label="PropertySheets"> <Import Project=
  • 我可以从 Visual Studio 中的构建后事件调用的控制台应用程序发送错误吗?(Can I send error from console application that is called by post-build event in Visual Studio?)
    问题 因为我在 ASP.net Web Application 项目中设置了 post-build 事件来运行以下命令行。 开始 $(SolutionDir) [PathToMyApplicationInSameSolution] [某些参数] 所以我需要从控制台应用程序向 Visual Studio 发送一些错误以显示构建错误(如 Visual Studio 构建错误) 谢谢 所以我将构建后事件命令更改为以下命令。 $(SolutionDir)[PathToMyApplicationInSameSolution] [一些参数] 然后,我编辑我的主要功能以显示错误。 我在 Visual Studio 的错误列表中看不到任何内容。 我只在输出中看到。 您知道如何显示 Visual Studio 生成的构建错误等错误吗? [STAThread] static void Main(string[] args) { Console.Error.WriteLine("Test Error"); Console.WriteLine("test error"); } 谢谢 附言。 因为我刚开始使用命令应用程序,所以我忘记了为控制台应用程序创建新线程之类的开始。 回答1 我找到了解决这个问题的方法。 Visual Studio 将检测一些输出模式以报告为错误。 所以
  • Visual Studio:即使项目是最新的,也运行C ++项目的生成后事件(Visual Studio: Run C++ project Post-Build Event even if project is up-to-date)
    问题 在Visual Studio(2008)中,即使项目是最新的,是否也可以强制C ++项目运行后生成事件? 具体来说,我有一个构建COM进程内服务器DLL的项目。 该项目具有运行“ regsvr32.exe $(TargetPath)”的生成后步骤。 这可以在“重建”上很好地运行,但是只有在对项目源进行了更改的情况下,才可以在“构建”上运行。 如果我不做任何更改就进行“构建”,Visual Studio只会报告该项目是最新的,什么也不做-生成后事件未运行。 有什么方法可以强制事件在这种情况下运行? 这是必需的,因为尽管DLL本身是最新的,但注册信息可能不是最新的。 回答1 您可以使用“定制构建步骤”属性页面来设置要运行的批处理文件。 如果未找到“输出”设置中指定的文件或该文件已过期,则此命令将运行。 只需在此处指定一些不存在的文件,定制构建步骤将始终运行。 即使您的项目是最新的,它也将运行,因为永远不会找到输出文件。 回答2 使用此DisableFastUpToDateCheck 看一个例子: <PropertyGroup> <PostBuildEvent>IF EXIST C:\Projects\Copy_Files_To_Instance.ps1 ( powershell -file C:\Projects\Copy_Files_To_Instance.ps1)<
  • Visual Studio 生成后事件宏为空(Visual Studio post-build event macros are empty)
    问题 在 Visual Studio 2013(或 2015)中,我有一个特定项目,在构建后事件中,我试图将 $(TargetDir) 传递给批处理文件。 问题是,除了以“解决方案”开头的宏之外,所有宏都是空的。 此外,所有宏都在“编辑构建后事件命令行”对话框中正确显示。 例子 echo ConfigurationName is "$(ConfigurationName)" 结果是 Configuration name is "" 回答1 我有同样的问题。 根据 https://social.msdn.microsoft.com/Forums/vstudio/en-US/179716e8-89eb-40ff-ba13-339e2d25d1c8/outdir-and-targetpath-macros-are-empty?forum=msbuild,你有删除 csproj 文件中的PropertyGroup ,然后再次在 Visual Studio 中添加生成事件。 再次添加后,它将位于 csproj 文件的末尾,宏应该可以工作。 回答2 尝试 $(Configuration) 而不是 $(ConfigurationMode),我也遇到了这个问题,这解决了它,虽然我不知道为什么会发生...... 回答3 我想我想通了。 当我打开多个 VS 实例时,似乎会发生这种情况。
  • 在 Visual Studio 和 Unity 中使用 MDB 文件生成后事件(Post-build events with MDB files in Visual Studio and Unity)
    问题 我在 Unity 中的 MonoBehaviours 源代码不是 Assets 文件夹中的脚本,而是我添加为插件的编译后的 DLL。 我已经在 Visual Studio 中为我的 C# 项目添加了构建后事件,以尝试解决每次更改某些内容时都必须复制 DLL 文件和 MDB 文件的工作。 copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)\..\Assets\Plugins\$(ProjectName).dll" copy /Y "$(TargetDir)$(ProjectName).dll.mdb" "$(SolutionDir)\..\Assets\Plugins\$(ProjectName).dll.mdb" 它就像一个魅力......几乎。 我遇到的问题是 DLL 构建,然后运行此命令,但 MDB 文件还没有来得及更新,因此我将旧的 MDB 文件复制到 Assets/Plugins 文件夹。 有没有办法在复制之前等待 MDB 文件更新? 回答1 我现在有了有效的解决方案。 基本上,DLL 和 MDB 文件的复制是从我的 C# 项目属性中的 PDB 文件生成 MDB 文件的过程的一部分,作为构建目标,在 MonoMdbGenerator 完成执行之前,不会执行复制。 <Import Project="$
  • 如何从 Visual Studio 复制或部署 c# 命令行项目(how to copy or deploy c# command line project from Visual Studio)
    问题 我一直在手动将 dll、exe 等从“C# 命令行”项目复制到要由计划任务执行的 UNC 服务器共享。 有没有人建议我如何将其转换为 Visual Studio 中的简单操作? 这是我尝试过的: 发布向导。 它询问用户将如何安装应用程序,这与我的情况完全无关。 我只想把它放在服务器共享上。 项目属性 -> 发布。 这似乎与发布向导几乎相同。 项目中包含的批处理文件或 PowerShell 脚本。 我没有看到从 Visual Studio 中启动它的简单方法。 回答1 如果您只需要从输出文件夹中复制 exe/dll,您可以在 Visual Studio 中设置一个 Post-build 事件并指定XCOPY命令将该文件夹的输出复制到您的服务器共享文件夹中,例如: XCOPY $(OutDir) \\Server\folder 如果您不想在每次构建时复制,则必须手动复制服务器中的文件。 您可以编写一个批处理文件并在完成后执行该文件。 我不知道 Visual Studio 中有任何直接的方法可以为您执行此操作。 回答2 使用 Post-build 事件 xcopy 文件。 您需要将其设置为有条件的,以便仅在选择发布版本时进行复制。 让它看起来像这样: if not "$(OutDir)" == "bin\Release\" goto skip xcopy /d /y "$
  • 使用 CMake 在构建后运行 C++ 程序(Use CMake to run a C++ program post-build)
    问题 我有一个用 C++ 编写的应用程序,我使用 CMake 来构建和发布二进制文件。 我想让 CMakeLists.txt 脚本编译并运行一个 CPP 文件,该文件用于在为应用程序构建二进制文件后对许可证文件进行时间戳和加密。 我见过运行execute_process命令的示例,例如: execute_process(COMMAND "gcc -o foo foo.cpp" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) execute_process(COMMAND "./foo" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} RESULT_VARIABLE MY_FOO_VAR) 我正在使用 Visual Studio 2010 在 Windows 上进行构建。 问题是我不确定如何让 CMake 在 VS 的构建过程中运行程序。 我希望构建操作中的最后一件事是许可证文件时间戳,但我对 VS 或 CMake 的了解还不够,无法进行此设置。 回答1 您说要在构建后运行该文件。 execute_process()在 CMake 时运行,而不是在构建时运行。 你要找的是add_custom_command() : add_executable(LicenseStamper stamper
  • Visual Studio发布生成事件卡住,等待可执行文件完成,然后在调试模式下运行应用程序(Visual Studio post build events stuck waiting for executable to finish before running app in debug mode)
    问题 在我的项目上构建帖子的一部分是执行我编写的用于测试主应用程序的程序。 不幸的是,Visual Studio中的后期构建过程会锁定等待可执行文件退出。 因此,我被困关闭我的测试程序,以便完成构建后的过程并运行我的应用程序。 如何更改此设置,以便VS在启动之前不等待程序返回? 谢谢。 回答1 我还发现start技巧不起作用,并且下载单独的工具来完成这样一个简单的任务似乎过多。 经过一些额外的搜索后,我发现了这个SO帖子,它给出了适合我需要的答案。 只需将<actual-command-line-to-run>替换为您的命令即可。 如果路径中有空格,请记住提供可执行文件的完整路径,并将其封装在“引号”中。 powershell start-process <actual-command-line-to-run> 回答2 哇,VS似乎真的很固执。 您可以使用此小工具启动应用程序而无需显示cmd窗口(除其他外)。 在您的发布活动中: c:\path\to\cmdow /run app.exe 回答3 这似乎是VS 2010的一个已知的问题(例如这里和这里),似乎它不会很快被修正了。 关于一种可能的解决方法,类似于@RichieHindle提到的一种方法,MS Connect人员之一建议: START /WAIT cmd /c YourPostBuildTool.exe 回答4
  • 如何获取Visual Studio的“发布”功能以包含来自构建后事件的文件?(How to get Visual Studio 'Publish' functionality to include files from post build event?)
    问题 我目前正在尝试使用Visual Studio 2010的“发布”和MSDeploy功能来满足我的Web部署需求,但是在根据我的构建配置自定义软件包方面遇到了障碍。 我在32位环境中进行开发,但需要为64位环境创建发行包,因此在“发布”配置中,我有一个构建后事件,该事件将64位版本的第三方dll复制到bin目录中,从而覆盖32位版本。 当我使用“发布”功能时,即使正确的64位dll被复制到bin目录,它也不会包含在软件包中。 有没有一种方法可以使“发布”包含在构建后事件期间已复制到bin目录中的文件? 回答1 我在“如何使用VS2010 Web部署程序包包含其他文件?”中回答了类似但不同的问题。 在您的方案中,您正在使用生成后事件,我建议您删除生成后事件,并使用自己的MSBuild目标而不是生成后事件来实现您的操作。 在下面,您将找到其他答案的文本。 来自:如何使用VS2010 Web部署程序包包含其他文件? 好问题。 我刚刚在Web部署工具(MSDeploy)上发布了有关此问题的非常详细的博客文章:构建包,包括额外的文件或排除的特定文件。 这是摘要。 包含文件后,我还将展示如何排除文件。 包括额外文件 如果您对MSBuild感到满意,那么将额外的文件包含到程序包中会比较困难,但是仍然不算什么,如果您不熟悉MSBuild,请阅读此内容。 为此
  • Visual Studio Post Build Event MT.exe 命令失败,代码为 9009(Visual Studio Post Build Event MT.exe command fails with code 9009)
    问题 嗨,我正在从我的后期构建事件中运行以下命令: C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1" 它因退出代码 9009 而失败......我不明白为什么会发生这种情况; 有什么建议么? 回答1 尝试在mt.exe路径周围添加引号,例如: "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe" 另外,请确保路径有效。 希望这可以帮助。 我一整天都在与代码 9009 对抗,完整引用的路径似乎使它起作用。 回答2 退出代码 9009 是文件未找到错误。 除非您在整个路径和可执行文件名称周围包含引号,否则后构建命令的路径中存在的空格会导致命令提示符出错。 本质上,在您的构建后命令中,它尝试使用参数执行C:\Program : Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$
  • 构建网站部署包作为构建后事件(Build website deployment package as a postbuild event)
    问题 我使用的是visual studio 2010。我有一个网站项目,我想在每次构建项目时构建一个网站部署包。 基本上,我正在寻找一些后构建 MSBuild 命令的示例,该命令基本上与网站右键菜单中的“构建部署包”选项执行相同的操作。 回答1 我假设您使用的是 Web 应用程序项目,因为网站项目没有“构建部署包”。 我建议不要在每次构建时都执行包,因为它会大大减慢您的开发速度。 话虽如此,你可以在这里做到这一点。 如果您真的想这样做,最好的办法不是使用构建后事件,而是编辑项目文件并扩展构建过程。 为此,请为您的网站打开 .csproj 文件,然后在底部(在导入元素之后)放置以下内容 <PropertyGroup> <BuildDependsOn> $(BuildDependsOn); Package </BuildDependsOn> </PropertyGroup> 这样做是扩展构建过程以调用Package目标。 这与在 Visual Studio 中调用“构建部署包”目标时调用的目标相同。 回答2 对我来说,Sayed 的回答不适用于命令行 msbuild 执行(我需要Publish目标,但想法是相同的): 在涉及目标“Build”的目标依赖图中存在循环依赖 我不能使用DefaultTargets因为我想在命令行上发布但只能从 VS 构建。 这是有效的方法: <Project
  • “附加到进程”作为构建后事件(“Attach to Process” as a post-build event)
    问题 我有一个在“w3wp.exe”进程下运行的应用程序。 在调试时,我经常发现自己遵循以下步骤: 1 - 做一些改变 2 - 构建项目 3 - 使用“工具”菜单下的“附加到进程”对话框附加到“w3wp.exe”。 4 - 在应用程序中执行一些操作以使我的代码执行,以便我可以在调试器中逐步执行 我想在构建后脚本中自动执行第 3 步,以便 IDE 在构建完成后自动附加到该过程。 请注意,我已经将应用程序作为构建后流程的一部分启动,因此我可以依靠此时存在的流程。 有谁知道自动执行“附加到进程”命令的方法吗? 命令行中的某些东西会特别好,但是宏也可以。 我在 64 位 Windows 7 下使用 Visual Studio 2008。 编辑@InSane 基本上给了我正确的答案,但它不起作用,因为我需要调试托管代码,而不是本机代码。 似乎 vsjitdebugger 默认使用本机代码,因此我的断点没有被命中。 从 IDE 内部,我可以指定“托管代码”并按预期附加调试器。 那么有没有办法将 vsjitdebugger 指向托管代码? 回答1 我终于能够用我在互联网上其他地方找到的一个例子来解决这个问题。 我在这里分享它,因为这对我有帮助。 1 - 使用以下代码创建一个新的命令行应用程序(此示例在 VB.NET 中)。 Option Strict Off Option Explicit
  • Visual Studio 增量构建:创建 XML 文档文件太晚(Visual Studio incremental build: XML documentation file is created too late)
    问题 我有一个用于 Visual Studio 2005 的 DLL 项目,它打开了“XML 文档文件”。 每当我进行增量构建时,在构建后事件执行期间,输出目录中都没有 XML 文档文件。 如果我在构建后事件期间暂停构建(使用来自 GnuWin32 CoreUtils 的 sleep 实用程序),我可以在输出目录中看到名称为 vs5BB5.tmp 的文件。 但是在构建后事件(和“AfterBuild”目标,因为我在那里进行了一些自定义)完成之前,此文件不会重命名为 MyLib.xml。 对于 Studio 中的干净构建和从命令行启动的 MSBuild,一切都按预期工作 - 在构建后事件之前创建 XML 文档文件。 为什么会发生这种情况,以及如何修复增量构建? 回答1 只是有同样的问题。 这是 Visual Studio 和增量构建的已知问题。 请参阅有关 microsoft connect 的这篇文章。 我用条件 xcopy 解决了它,如下所示: if exist "$(TargetDir)$(TargetName).xml" xcopy $(TargetDir)$(TargetName).xml $(ProjectDir)......\bin\ /C /I /R /Y 顺丰 回答2 只是自己有这个问题...... 我发现 xml 文件被命名为 .tmp 文件,因此您可以将此
  • 构建时命令副本以代码 4 退出 - Visual Studio 重启解决了它(Command copy exited with code 4 when building - Visual Studio restart solves it)
    问题 时不时地当我在这里构建我的解决方案(其中包含 7 个项目)时,我会在 Visual Studio 2010 Premium ed 中遇到可怕的“命令副本退出,代码为 4”错误。 这是因为无法通过构建后事件。 这是暂时解决问题的方法 有时:重新启动 Visual Studio,我就可以构建解决方案有时:重新启动 Visual Studio 和我选择的文件管理器 (Q-Dir 4.37) 都可以解决这个问题。 下面是构建后事件的样子: xcopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)" /Y 当您以代码 [insert value] 错误退出命令副本时,通常是由于以下原因: 读/写权限丢失的文件错误的目录 但是 - 显然,有时我构建解决方案时,没有问题。 仅供参考,我两周前卸载了 ReSharper 5.1.1,从那时起 Visual Studio 一直给我一些错误(其中包括无法调试)。 我重新安装了 Visual Studio,从那以后它运行得更好,但仍然遇到这个问题。 是否与某些 ReSharper 的东西在某处有关? 你有没有遇到同样的问题并解决了? 或者你有什么可能的解决方案吗? 回答1 我总是发现这是一个文件锁定问题。 代码 4 是无法访问文件。 我发现的一个部分解决方案是对