我希望实现一个后构建事件,执行以下操作:
- 复制 DLL 输出的相对路径(1 个文件,不包括所有调试文件)
- 将输出的 DLL 注册到 GAC
那符合你的需求吗?
copy $(TargetPath) $(TargetDir)..\..\someFolder\myoutput.dll
regasm $(TargetPath)
(输入到项目属性下的后构建步骤字段)
xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)"
<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)。\
结尾时需要它们。因此,最好始终使用它们。对于问题中的第二步,我似乎更喜欢以下方法:
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil" /f /i $(TargetPath)
注意:这需要在开发机器上安装Windows SDK。
这个问题比较老了。最简单的方法是在你的.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>
你可能想看一下 MS Build。这是我们在工作中使用的。
delete $(SolutionDir)FileService\$(ProjectName).dll
copy $(TargetPath) $(SolutionDir)FileService\$(ProjectName).dll