将Team build输出文件夹中的文件包含到XAP中

时间:2012-09-01 16:00:01

标签: windows-phone-7 silverlight-4.0 msbuild tfs2010 tfsbuild

我正在尝试使用TFS 2010为Windows Phone 7.1项目进行持续集成。 有2个资源项目(Win32 Project for localisation)和主要的Windows手机项目。

我已将上述2个项目的项目输出复制到主WP项目中的文件夹(在“MUI”文件夹内),并在构建操作中将文件标记为“内容”。 从Visual Studio 2010构建和运行WP7项目时,一切正常。

但是当我尝试使用TFS 2010构建系统构建项目时, 构建失败并出现以下错误“Xap打包失败。对象引用未设置为对象的实例”。在研究了错误后,我发现当文件在TFS代理机器上构建时,TFS二进制文件(输出文件夹)文件夹没有“MUI”文件夹,但是2个资源项目的输出直接复制到二进制文件中文件夹,因此无法构建。

另外我注意到如果我将文件直接添加/包含到主WP项目中,TFS构建成功。(换句话说,如果我将项目输出配置为复制则失败 到WP7项目文件夹。由于TFS将所有内容构建为“二进制文件”文件夹

如何在TFS二进制文件夹中将这些文件包含在WP7 XAP文件中(引用它们)? (使用MSBuild任务?),同样适用于本地 在VS2010中构建。

还有其他方法吗?

THX

2 个答案:

答案 0 :(得分:0)

通过将资源项目的输出路径设置为来解决问题 WP7项目的输出路径,然后使用XapFilesInputCollection将它们包含在xap中。

还更改了WMAppManifest.xml中的引用路径以获取应用程序标题。

所做的更改

。添加/替换每个资源项目文件中的OutDir标记。

<OutDir>$(SolutionDir)$(SolutionName)\bin\Debug</OutDir>

这会将资源项目输出复制到主项目输出 AppResLib.dll和AppResLib.dll.040b.mui

B'/ em>的。然后在主Windows Phone项目文件(.csproj)中添加

      <Target Name="AfterCompile">
         <ItemGroup>
           <XapFilesInputCollection Include="$(OutDir)\AppResLib.dll"/>
           <XapFilesInputCollection Include="$(OutDir)\AppResLib.dll.040b.mui"/>
         </ItemGroup>
   </Target>

这适用于VS 2010构建版和TFS 2010构建版系统。

参考Silverlight MSBuild Task - execute command line after Xap copied to ClientBin

答案 1 :(得分:0)

这就是我使用SlowCheetah解决它的方法。


经过测试:

<强>地点

  • 本地
  • 构建服务器(TFS 2012)

Visual Studio版本

  • Visual Studio 2010
  • Visual Studio 2012

Silverlight版本

  • Silverlight 4

过程

  • 使用SlowCheetah创建转换
  • 在项目结束时使用以下信息更新Visual Studio项目:

    <PropertyGroup>
        <XapPackagerDependsOn>
          TransformAllFiles;
          IncludeTransformedFileInXapFile;
          $(XapPackagerDependsOn);
        </XapPackagerDependsOn>
    </PropertyGroup>
    <Target Name="IncludeTransformedFileInXapFile">
        <ItemGroup>
          <XapFilesInputCollection Include="$(OutDir)YOUR-FILES.CONFIG" />
        </ItemGroup>
    </Target>
    
    • 确保配置文件和转换文件不会被复制到输出文件夹:

      enter image description here