【问题标题】:VS Post Build EventVS 构建后事件
【发布时间】:2008-12-16 13:28:32
【问题描述】:

我想实现一个执行以下操作的构建后事件

  1. DLL 输出的相对路径副本(1 个文件,不是所有的 debug jazz)
  2. 将输出 DLL 注册到 GAC

这是怎么做到的?

【问题讨论】:

    标签: visual-studio build post-build-event


    【解决方案1】:

    你想要吗?

    copy $(TargetPath) $(TargetDir)..\..\someFolder\myoutput.dll
    regasm $(TargetPath) 
    

    (在项目属性下的构建后步骤字段中输入)

    【讨论】:

    • 在 Microsoft Visual Studio 2010 上,这将失败并出现 9009 错误:您需要使用 regasm 的完整路径,如下所示:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ regasm.exe $(TargetPath)
    【解决方案2】:

    在“项目属性->构建事件->发布构建事件命令行”中输入以下内容:

    xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)"
    

    或将以下 sn-p 添加到项目(例如 csproj)文件中

    <PropertyGroup>
        <PostBuildEvent>xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)"</PostBuildEvent>
    </PropertyGroup>
    

    请注意,建议在复制命令参数周围添加“”,以避免包含空格的路径出现问题。另请注意,可以使用 && 组合多个命令

    【讨论】:

      【解决方案3】:

      您确定要将此作为编译的一部分吗?如果可以避免的话,我建议在解决方案中使用项目引用而不是 GAC。复制文件是一回事,但在 GAC 中注册相当麻烦,您可能需要考虑编译代码的其他环境。例如其他开发人员的机器、测试环境/构建服务器等。如果您有构建服务器实际上,您应该将 NAnt 之类的东西与某种持续集成服务器一起使用。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,我费了些力气才让它发挥作用。

        就我而言,我想做其他方式,将 SDL dll 复制到我的输出文件夹中。

        copy "$(SolutionDir)SDL\lib\x86\SDL.dll" "$(SolutionDir)$(Configuration)\"
        

        请注意,$(Configuration) 将是您的输出文件夹(例如 Debug 或 Release)。

        引号是我所缺少的,显然当右侧以\ 结尾时您需要它们。因此,始终使用它们可能更安全。

        希望能为别人节省 5 分钟!

        附:我使用 Visual Studio 2010

        【讨论】:

          【解决方案5】:

          您可能想查看 MS Build。它是我们在工作中使用的。

          CodeProject Link & MSDN Ref

          【讨论】:

          • 是的,MSBuild 非常适合这一点。如果您想留在 Visual Studio 中,您还可以在项目属性下输入构建后命令。
          【解决方案6】:

          对于问题中的第 2 步,我似乎更喜欢以下内容:

          "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil" /f /i $(TargetPath)
          

          注意:这需要在您的开发机器上安装Windows SDK

          More info on the available macros, such as $(TargetPath), on MSDN.

          【讨论】:

            【解决方案7】:

            遇到了相关问题。这里的答案有帮助(谢谢!)。

            我的场景是在调试一个依赖 MEF 的应用程序时,我需要在特定位置拥有相关的 DLL。我遇到了覆盖先前构建的问题,因此确实需要向脚本添加删除。

            delete $(SolutionDir)FileService\$(ProjectName).dll
            copy $(TargetPath) $(SolutionDir)FileService\$(ProjectName).dll
            

            希望对某人也有帮助!

            【讨论】:

              猜你喜欢
              • 2011-09-05
              • 1970-01-01
              • 2023-04-05
              • 1970-01-01
              • 2012-08-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多