4

我有一个开源 .NET 项目,其主要工件是一个 DLL,需要将其安装到 GAC 以用于其主要用例。因此我想在 AfterBuild 任务期间安装它。我正在使用MSBuild Community Extensions中的 GacUtil msbuild 任务。它不工作。

我从这里得到的 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 失败的原因?

4

2 回答 2

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>
于 2011-10-05T08:36:44.240 回答
0

您是否使用 Message 任务验证了 $(TargetName) 的值?

您可能必须在 build.proj 文件中指定一个属性:

  <PropertyGroup>
    <AssemblyPath></AssemblyPath>
  </PropertyGroup>

  <Target Name="AfterBuild">
    <GacUtil Assemblies="$(AssemblyPath)" />
  </Target>

然后从 Visual Studio 生成后事件中传递属性值:

msbuild /t:AfterBuild /verbosity:diagnostic /p:AssemblyPath="$(TargetPath)"
于 2011-10-03T15:20:36.577 回答