MSBuild社区任务GacUtil默默地为我失败

时间:2011-09-26 01:47:43

标签: msbuild msbuildcommunitytasks gacutil

我有一个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失败的原因?

2 个答案:

答案 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)"