R – Silverlight ViewBase in separate assembly – possible

msbuildsilverlight-3.0

I have all my views in a project inheriting from a ViewBase class that inherits from UserControl. In my XAML I reference it thus:

<f:ViewBase x:Class="Forte.UI.Modules.Configure.Views.AddNewEmployeeView"
    xmlns:f="clr-namespace:Forte.UI.Modules.Configure.Views"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

It works fine.

Now I have moved the ViewBase to another project (so I can refernce it from multiple projects) so I reference it like:

<f:ViewBase x:Class="Forte.UI.Modules.Configure.Views.AddNewEmployeeView"
    xmlns:f="clr-namespace:Forte.UI.Modules.Common.Views;assembly=Forte.UI.Modules.Common"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

This works fine when I run from the IDE but when I run the same sln from MSBuild it gives a warning:

"H:\dev\ExternalCopy\Code\UI\Modules\Configure\Forte.UI.Modules.Configure.csproj" (default target)
(10:12) ->
(ValidateXaml target) ->
H:\dev\ExternalCopy\Code\UI\Modules\Configure\Views\AddNewEmployee\AddNewEmployeeView.xaml(1,2,1,2): warning : The tag 'ViewBase' does not exist in XML namespace 'clr-namespace:Forte.UI.Modules.Common.Views;assembly=Forte.UI.Modules.Common'.

Then fails with:

"H:\dev\ExternalCopy\Code\UI\Modules\Configure\Forte.UI.Modules.Configure.csproj" (default target)
(10:12) ->
(ValidateXaml target) ->
C:\Program Files\MSBuild\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.Common.targets(210,9):
error MSB4018: The "ValidateXaml" task failed unexpectedly.\r
C:\Program Files\MSBuild\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.Common.targets(210,9): er
ror MSB4018: System.NullReferenceException: Object reference not set to an instance of an object.\r
C:\Program Files\MSBuild\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.Common.targets(210,9): er
ror MSB4018: at MS.MarkupCompiler.ValidationPass.ValidateXaml(String fileName, Assembly[] assemb
lies, Assembly callingAssembly, TaskLoggingHelper log, Boolean shouldThrow)\r
C:\Program Files\MSBuild\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.Common.targets(210,9): er
ror MSB4018: at Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute()\r
C:\Program Files\MSBuild\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.Common.targets(210,9): er
ror MSB4018: at Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute()\r
C:\Program Files\MSBuild\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.Common.targets(210,9): er
ror MSB4018: at Microsoft.Silverlight.Build.Tasks.ValidateXaml.Execute()\r
C:\Program Files\MSBuild\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.Common.targets(210,9): er
ror MSB4018: at Microsoft.Build.BuildEngine.TaskEngine.ExecuteInstantiatedTask(EngineProxy engin
eProxy, ItemBucket bucket, TaskExecutionMode howToExecuteTask, ITask task, Boolean& taskResult)

Any ideas what might be causing this behaviour?

Using Silverlight 3

Here is a cut down version of the MSBuild file that fails to build the sln that builds fine in the IDE (sorry couldn't get it to format here):

<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Compile">
<ItemGroup>
<ProjectToBuild Include="..\UI\Forte.UI.sln">
<Properties>Configuration=Debug</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Compile">
<MSBuild Projects="@(ProjectToBuild)"></MSBuild>
</Target>
</Project>

Thanks for any help!

Best Answer

The only way, so far, I have found for getting around this is to refernce the actual assembly rather than the project. It's a bit hokey, anyone got a better idea?

Related Topic