繁体   English   中英

VS 构建后事件

[英]VS Post Build Event

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

  1. DLL output 的相对路径副本(1 个文件,不是所有的调试爵士乐)
  2. 将 output DLL 注册到 GAC

这是怎么做到的?

你想要那吗?

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

(进入项目属性下的后期构建步骤的字段)

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

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

或者将以下代码段添加到项目(例如csproj)文件中

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

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

您确定要在编译过程中执行此操作吗? 如果可以避免,我建议在解决方案而不是GAC中使用项目引用。 复制文件是一回事,但在GAC中注册是相当具有侵入性的,您可能需要考虑编译代码的其他环境。像其他开发人员的机器,测试环境/构建服务器等等。如果您有构建服务器你真的应该使用NAnt这样的东西和某种持续集成服务器。

我不得不遇到同样的问题而且我努力工作以使其有效。

在我的情况下,我想做另一种方法是将SDL dll复制到我的输出文件夹中。

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

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

引号是我所遗漏的,显然你需要它们,当右手边有一个\\ 因此,总是使用它们可能更安全。

希望能在5分钟内拯救别人!

PS我使用Visual Studio 2010

你可能想看看MS Build。 这是我们在工作中使用的。

CodeProject链接MSDN参考

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

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

注意:这需要在开发计算机上安装Windows SDK

有关可用宏的更多信息,例如MSDN上的$(TargetPath)。

陷入相关问题。 这里的答案有帮助(谢谢!)。

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

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

希望能帮助别人!

这个问题很老了。 最简单的方法是在 your.csproj 文件中添加类似的内容。 例如,我正在虚拟机上运行一些测试,并且很高兴在编译后将其发送给它:


<Project>
    ...
     <!-- Upload to virtual machine -->
    <Target Name="rsync" AfterTargets="Build">
        <Exec Command="C:\Windows\System32\wsl.exe rsync -azv -e 'ssh -i /path/to/my/private/key' --delete  /mnt/c/repos/MyProject/bin/Debug/net7.0/ root@vm.ublux.com:/usr/share/foo/" />
    </Target>
</Project>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM