使用TFS Build进行dotfuscator 4.5任务时出错(使用TFS 2008进行团队构建)

时间:2010-06-24 08:38:42

标签: tfs2008 tfsbuild team-build visual-studio-2008-sp1 dotfuscator

我通过TFS Build a.k.a Team Build调用dotfuscator任务,取自-=Dotfuscator Task with Team Build =-并收到以下错误:

Build FAILED.


(AfterCompile target) -> 

error MSB4061: The "Dotfuscate" task could not be instantiated from the assembly "C:\Program Files\MSBuild\PreEmptive\Dotfuscator\4.0\PreEmptive.Dotfuscator.Tasks.dll". 

error MSB4061: System.InvalidOperationException: Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application.

error MSB4061:    at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)

error MSB4061:    at System.Windows.Forms.Form.ShowDialog()
error MSB4061:    at PreEmptive.Tasks.Dotfuscate.b()
error MSB4061:    at PreEmptive.Tasks.Dotfuscate.a()
error MSB4061:    at PreEmptive.Tasks.Dotfuscate..ctor()
error MSB4060: The "Dotfuscate" task has been declared or used incorrectly, or failed during construction. Check the spelling of the task name and the assembly name.

    0 Warning(s)
    2 Error(s)

dotfuscator中与dotfuscator相关的代码如下:

  <!---
  All Dotfuscation Stuff here...
  -->

  <PropertyGroup>
    <ConfigPath>$(SolutionRoot)\..\$(BuildDefinitionPath)\BuildType\dotfuscator.xml</ConfigPath>
    <!--<InputPath>$(OutDir)</InputPath>-->
    <InputPath>\\Dev-6\TempBuild\Output\</InputPath>
  </PropertyGroup>

  <ItemGroup>
    <InputAssembly Include="$(InputPath)\*.dll;$(InputPath)\*.exe" Exclude="$(InputPath)\*.vshost.exe"/>
  </ItemGroup>

  <Target Name="AfterCompile">

    <!--Perform obfuscation steps after assemblies are compiled.-->

    <Dotfuscate InputAssemblies="@(InputAssembly)" Properties="$(DotfuscatorProperties)" ConfigPath="$(ConfigPath)">
      <Output TaskParameter="MappingFile" ItemName="DotfuscatorMappingFile"/>
      <Output TaskParameter="ReportFiles" ItemName="DotfuscatorReportFiles"/>
      <Output TaskParameter="OutputAssemblies" ItemName="DotfuscatedAssemblies"/>
      <Output TaskParameter="SatelliteAssemblies" ItemName="DotfuscatedSatelliteAssemblies"/>
      <Output TaskParameter="DebugSymbols" ItemName="DotfuscatedDebugSymbols"/>
    </Dotfuscate>
  </Target>
  <!-- End of dotfuscation Stuf....-->

我正在使用以下dotfuscator任务:

<Import Project="$(MSBuildExtensionsPath)\PreEmptive\Dotfuscator\4.0\PreEmptive.Dotfuscator.Targets" />

构建机器安装了dotfuscator专业版。它功能齐全,手动使用时效果很好。

请帮助解决这个问题。

此致

1 个答案:

答案 0 :(得分:2)

这通常是由在不同帐户下运行的构建服务引起的。 Dotfuscator要求在其运行的每个用户帐户的初始执行期间接受EULA。

您可以使用构建所使用的帐户登录构建服务器,运行Dotfuscator并接受EULA。一旦你完成了该账户下的未来执行将会正常运作。

如果您无法使用构建服务凭据登录构建服务器,则PreEmptive技术支持可以为您提供另一种方法来解决此问题。您可以通过support@preemptive.com与支持小组联系,或直接在http://preemptive.com/support提交支持请求。