C# 如何在生成事件VS2013中向RegAsm注册DLL

C# 如何在生成事件VS2013中向RegAsm注册DLL,c#,visual-studio-2013,dll,registration,regasm,C#,Visual Studio 2013,Dll,Registration,Regasm,在每次编译中,我的程序中的输出dll都会发生变化,每次编译后,我必须再次注册dll。我可以通过Visual Studio命令提示符将其注册为regasmmydll.dll。但我不想每次都这样做,我希望它能自动完成。经过一些研究,我发现Visual Studio可以从构建事件(项目>属性)中执行此操作。但我以前从未使用过构建事件,我真的无法理解它会是什么样子。我应该将dll路径写入预构建事件命令行吗 我的dll位置:C:\ProgramFiles(x86)\Onur\Client\Bin\Clie

在每次编译中,我的程序中的输出dll都会发生变化,每次编译后,我必须再次注册dll。我可以通过Visual Studio命令提示符将其注册为regasmmydll.dll。但我不想每次都这样做,我希望它能自动完成。经过一些研究,我发现Visual Studio可以从构建事件(项目>属性)中执行此操作。但我以前从未使用过构建事件,我真的无法理解它会是什么样子。我应该将dll路径写入预构建事件命令行吗

我的dll位置:C:\ProgramFiles(x86)\Onur\Client\Bin\Client.dll

我的regasm位置:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe

在构建事件部分中,我应该为预构建和后构建命令编写什么

我试过了,但甚至没有在里面编译。

RegAsm可执行文件位于.Net Framework版本文件夹中,但默认情况下不在路径中

幸运的是,存在两个环境变量,即
FrameworkDir
FrameWorkVersion
,您可以在构建后事件中使用它们。MSDN文档说明了如何使用

对于您的特定情况,以下内容在生成后事件中有效(因为您的新dll需要编译并准备就绪):

$(frameworkdir)\$(frameworkversion)\regasm.exe“$(TargetPath)”
请注意,
$(TargetPath)
是如何用双引号括起来的,以防止在路径中有空格时发生任何意外

如果
frameworkdir
和/或
frameworkversion
不存在,您可以使用完整路径,但在这种情况下,您必须确保要运行该生成的所有计算机上都存在该路径。您还可以决定将regasm.exe置于源代码管理之下,并使其成为构建工具的一部分

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe“$(TargetPath)”
请记住,RegAsm需要提升的特权,因此您需要运行已经提升的Visual Studio,以使RegAsm的执行首先工作


使用“生成输出”窗格诊断错误。

您应该注意的更重要的细节是注销旧版本。如果你不这样做,那么你可以把你的注册表弄得一团糟。考虑到共同的需求,只需一个简单的复选框,就可以为您解决所有问题。项目>属性>构建选项卡>勾选“注册COM互操作”。无论哪种方式,这些注册表项只能由提升的程序修改,因此您必须提升VS。右键单击快捷方式并选择“以管理员身份运行”。嗨,Hans,感谢您的回复。我勾选了这个框,我意识到我必须在每个项目构建中取消注册dll。我会按照你的回答,让你知道结果soonHi Rene谢谢你的回复。我曾经这样写过PostBuild部分:$(FrameworkIR)\$(frameworkversion)\regasm.exe“$(C:\Program Files(x86)\Onur\Client\Bin\Client.dll)”,但它没有编译。但是VisualStudio的错误列表中没有错误。输出结果是->我错过了哪里?ThanksI必须使用RegAsm
C:\windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe“$(TargetPath)”/codebase/tlb