WPF XAML标记编译器在InitializeComponent()中生成错误的URL

时间:2009-09-08 15:07:39

标签: .net wpf xaml msbuild

所以我将WPF集成到我构建的Windows窗体应用程序中。我遇到的一个重大障碍是,当Markup编译器在后台生成.g.cs文件时,InitializeComponent方法生成错误。

以下是生成的内容: System.Uri resourceLocater = new System.Uri(“/ MapWorksheet; V9.9..0; component / controls / geoworksheetcon”+                     “trol.xaml”,System.UriKind.Relative);

URI描述符的版本部分有什么不对。这可以通过删除它或更正版本(在这种情况下为9.9.0.0)来工作。我尝试稍微更改版本以调试它(到9.9.1.2),但这不会影响工具的输出。我首先删除了Obj目录,所以我知道这个文件是新创建的。

我正在寻找一种方法来解决这个问题,目前我必须手动编辑.g.cs文件才能使其正常工作。

哦,我也在使用MSBuild和VS2008。

提前致谢, 克里斯

2 个答案:

答案 0 :(得分:0)

这是一个MSBuild配置问题。

我和我的构建工程师一起工作了,他在MSBuild中重载了AssemblyVersion属性,导致XAML编译任务使用了错误的AssemblyVersion。

答案 1 :(得分:0)

自动执行此操作:

<Target Name="SetBuildNumber">
    <ReadLinesFromFile File="Properties\AssemblyInfo.cs">
        <Output TaskParameter="Lines" ItemName="ItemsFromFile" />
    </ReadLinesFromFile>
    <PropertyGroup>
        <Pattern>\[assembly: AssemblyVersion\(.(\d+)\.(\d+)\.(\d+).(\d+)</Pattern>
        <In>@(ItemsFromFile)</In>
        <Out>$([System.Text.RegularExpressions.Regex]::Match($(In), $(Pattern)))</Out>
        <AssemblyVersion>$(Out.Remove(0, 28))</AssemblyVersion>
    </PropertyGroup>
    <Message Text="AssemblyVersion = $(AssemblyVersion)" Importance="high" />
</Target>

<Target Name="BeforeBuild">
    <CallTarget Targets="SetBuildNumber" />
</Target>