2008-12-16 92 views
9

我想实现执行以下操作后生成事件VS后生成事件

  1. DLL输出(1个文件,不是所有的调试爵士)
  2. 寄存器的相对路径副本输出DLL到GAC

这是如何完成的?

回答

15

你想要吗?

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

(进入领域下的项目属性生成后步骤),你可能想看看MS建立

+7

在Microsoft Visual Studio 2010上,这将失败,并出现9009错误:您需要使用regasm的完整路径,如下所示:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm.exe $( TargetPath) – Contango 2010-10-08 11:48:02

1

。它是我们在工作中使用的。

CodeProject Link & MSDN Ref

+0

是的,MSBuild非常出色。如果你想留在Visual Studio中,你也可以在项目属性下输入post-build命令。 – 2008-12-16 13:47:09

7

回车以下为 “项目属性 - >生成事件 - >生成后事件命令行:”

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

或添加以下代码段项目(如的csproj)文件

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

请注意,建议在副本命令argume周围加上“” nts避免包含空格的路径出现问题。另外请注意,多个命令可以结合使用& &

5

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

2

我不得不同样的问题,我挣扎了一下,以便它的工作原理。

在我的情况下,我想要其他方式将SDL dll复制到我的输出文件夹中。

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

需要注意的是,$(Configuration)将是你的输出文件夹(如调试或发布)。

引号是我错过了,显然你需要他们,当右侧结束\。因此,总是使用它们可能更安全。

希望拯救别人一个5分钟!

P.S.我使用Visual Studio 2010

0

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

我的方案是在调试我需要在特定位置具有相关DLL的MEF相关应用程序。我遇到了覆盖之前的版本的问题,因此需要向脚本添加删除。

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

希望能帮助别人!