我有一个open source .NET project,其主要人工制品是一个DLL,需要根据其主要用例安装到GAC。因此,我想在AfterBuild任务期间安装它。我正在使用MSBuild Community Extensions中的GacUtil msbuild任务。它不起作用。
我从here获得的MSBuild代码是:
<Target Name="AfterBuild">
<GacUtil Assemblies="$(TargetName)" />
</Target>
我使用的命令是msbuild /t:AfterBuild /verbosity:diagnostic
。我得到的错误是:
Done building target "_CheckForInvalidConfigurationAndPlatform" in project "JustAProgrammer.ADPR.csproj".
Target "AfterBuild" in project "e:\src\JustAProgrammer.ADPR\JustAProgrammer.ADPR\JustAProgrammer.ADPR.csproj" (entry point):
Using "GacUtil" task from assembly "C:\Program Files (x86)\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll".
Task "GacUtil"
Done executing task "GacUtil" -- FAILED.
Done building target "AfterBuild" in project "JustAProgrammer.ADPR.csproj" -- FAILED.
Done Building Project "e:\src\JustAProgrammer.ADPR\JustAProgrammer.ADPR\JustAProgrammer.ADPR.csproj" (AfterBuild target(s)) -- FAILED.
我正在以管理员身份运行的cmd.exe副本中执行此命令,其路径中包含gacutil.exe。我使用这个相同的命令提示符从GAC成功安装和卸载此程序集,并仔细检查程序集不在c:\ windows \ assembly文件夹中。
如何弄清楚GacUtil失败的原因?
答案 0 :(得分:2)
看起来它试图用来访问该工具的路径是错误的(或者至少在我的情况下)。将“GacUtil”任务上的“ToolPath”属性设置为“$(FrameworkSDKDir)bin”,如下所示:
<Target Name="BeforeBuild">
<GacUtil Command="Uninstall" ToolPath="$(FrameworkSDKDir)bin" Assemblies="$(TargetName)" ContinueOnError="true"/>
</Target>
<Target Name="AfterBuild">
<GacUtil ToolPath="$(FrameworkSDKDir)bin" Assemblies="$(TargetPath)"/>
</Target>
答案 1 :(得分:0)
您是否使用消息任务验证了$(TargetName)的值?
您可能必须在build.proj文件中指定一个属性:
<PropertyGroup>
<AssemblyPath></AssemblyPath>
</PropertyGroup>
<Target Name="AfterBuild">
<GacUtil Assemblies="$(AssemblyPath)" />
</Target>
然后从Visual Studio post-build事件传递属性值:
msbuild /t:AfterBuild /verbosity:diagnostic /p:AssemblyPath="$(TargetPath)"