使用Silverlight 3项目在TFS构建上验证XMLAML失败

时间:2009-08-18 08:58:36

标签: silverlight tfs msbuild

我有一个Silverlight 3项目,在开发机器上编译时编译并运行正常。在安装了Silverlight 3和Silverlight 3 SDK的TFS环境中,出现以下错误:

  

C:\用户\ TFSSERVICE \应用程序数据\本地\温度\\推出\源头\源\干线\主题\   UserDatesStyles.xaml(63,47,63,47):   错误:属性'Command'有   在“按钮”类型中不存在   XML命名空间   'CLR-名称空间:Mvvm.Input;装配= MVVM'。

更多信息:Command是Button上的附加属性,它是Mvvm.Input命名空间中Mvvm程序集的一部分。

我在TFS服务器上遗漏了什么?我原以为我只需要SDK。如果我编辑此项目并将ValidateXAML元素更改为false,则TFS服务器会正​​确编译。但是,这显然不是理想的情况。

以下是导致它的XAML:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:commands="clr-namespace:MvvmFramework.Input;assembly=MvvmFramework"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d">
    <Style x:Key="UserDatesStyle" TargetType="controls:UserDates">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="controls:UserDates">
                    <Grid Height="600" Width="800" d:DesignWidth="800" d:DesignHeight="600">
                        <Button Content="Previous" 
      commands:CommandBinder.Command="{Binding PreviousPageCommand}" 
                                Margin="0,0,10,0" 
                                Style="{StaticResource PrevBtn}" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

3 个答案:

答案 0 :(得分:2)

我设法在我们的解决方案上修复它...开车让我疯了,我们可以通过将/ property:ValidateXaml = false传递给构建服务器来禁用构建服务器上的xaml验证。然而,当我们无法以混合方式构建项目时,它变成了一个停滞状态。 Blend并不遵循与VS相同的构建过程,也许它只是向shellbuild发送。

我在调用ValidateXaml的上方将它添加到Microsoft.Silverlight.Common.targets:

    <Message Text="--------------- Start: Build Hack -------------------------" />
    <Message Text="ReferenceAssemblies: @(ReferencePath);@(InferredReference->'$(TargetFrameworkDirectory)\%(Identity)')" />
    <Message Text="ProjectAssemblies: @(BuiltProjectOutputGroupKeyOutput)" />
    <Message Text="SilverlightPages: @(Page)" />
    <Message Text="SilverlightApplications: @(ApplicationDefinition)" />
    <Message Text="ProjectPath: $(MSBuildProjectFullPath)" />
    <Message Text="AssemblyName: $(AssemblyName)" />
    <Message Text="OutputPath: $(IntermediateOutputPath)" />
    <Message Text="ShouldThrow: $(ThrowErrorsInValidation)" />
    <Message Text="TargetFrameworkDirectory: $(TargetFrameworkDirectory)" />
    <Message Text="TargetFrameworkSDKDirectory: $(TargetFrameworkSDKDirectory)" />
    <Message Text="--------------- End: Build Hack -------------------------" />

...看起来ReferenceAssemblies没有正确引用其他silverlight项目的正确引用,ValidateXaml似乎创建了一个app域并加载所有这些引用来检查类型是否存在....无论如何切长话短说明ValidateXaml没有通过视觉工作室中提到的正确引用,因此我们怀疑它失败了。

我们认为它在我们的配置中有些损坏,我们最终修复了它,只需删除所有违规项目,让构建从cmd行(即msbuild.exe)和VS运行,然后再添加每个项目。完成所有操作后,我们注意到.sln中存在一些差异,问题代码在我们的Silverlight项目中有一个奇怪的“postProject”ProjectSection ......但它主要是那些“你永远不会真正知道的”, .csproj似乎是一样的。

删除项目并将其添加回来,为我们工作。我们怀疑是一个腐败的解决方案文件。

答案 1 :(得分:1)

我对Silverlight开发并不熟悉,但我确实安装了最新的Visual Studio 2008 SP1,Silverlight 3 RuntimeSDKToolsToolkit,我机器上的任何地方都没有 Mvvm.dll

这看起来像构建服务器中缺少的第三方dll,您的或其他人。

成功构建的开发计算机上引用的文件在哪里?

可能会为需要安装的堆栈缺失部分提供线索,或者将其添加到可在构建服务器上下拉时从项目引用的共享位置。

答案 2 :(得分:0)

我有同样的问题。

Build在Visual Studio中很好,但在Team Build中存在错误。我知道Xaml是有效的,类型来自的程序集是在项目之前正确引用和构建的,并且有问题的xaml验证。

我认为这是C:\ Program Files \ MSBuild \ Microsoft \ Silverlight \ v3.0 \ Microsoft.Silverlight.Common.targets文件中的ValidateXaml目标的错误,或者可能是在所有内容之前过早调用了目标完全建成。

我不知道。

我最终将csproj文件中的属性更改为false,尽管Team Build报告了大量的验证错误,但它编译并运行正常。