WPF with Dynamic module loading using prism - wpf

This is about WPF project with Dynamic module loading and navigation using prism. I am trying to figure out - how the WPF project loads shell module so that all related files such as Bootstrapper, catalog, etc. are initialized to register the modules (WPF projects) through catalog. This is required so we can use prism module loader.
More details below -
We are migrating a Silverlight project to a WPF project.
Silverlight Solution has following projects
MyProject.Web (aspx) with default.aspx which is initializing shell module ("I believe") by following code
<param name="source" value="ClientBin/ShellModule.xap" />
ShellModule Silverlight project with catalog.xaml which registers all Modularity:ModuleInfo and Bootstrapper.cs inheriting UnityBootstrapper which returns IModuleCatalog
Other Silverlight Module projects
I am trying to figure out how would WPF project achieve it without the MyProject.Web project and without a default.aspx
My very odd random guess - from App.xaml of Root project somehow?
WPF - https://prismlibrary.github.io/docs/wpf/legacy/Modules.html
Silverlight - https://www.wintellect.com/dynamic-module-loading-with-silverlight-navigation-using-prism/

Related

How to get WPF XAML Designer to play nicely with IValidatableObject from NET Standard 2.0 libraries?

Background:
using Visual Studio 2017 v15.4 (no ReSharper or any weird extensions)
Repro solution includes 2 projects:
WPF project: .NET 4.6.1, using NuGet PackageReference format
Class library: NET Standard 2.0
Both projects have the System.ComponentModel.Annotations NuGet package installed.
Problem
After upgrading my WPF project's NuGet format from the old packages.config to the new PackageReference, I started experiencing design-time errors:
Or sometimes the harsher flavor:
To start with, the following ViewModel code works fine:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class MainWindowViewModel
{
public ValClass MyProp => new ValClass();
}
public class ValClass : IValidatableObject
{
//Implementation stuff
}
However, if I then define an identical class in my NET Standard project, and include that as a type in my ViewModel, it produces the error.
Comparing an F12 on the IValidatableObject of these 2 classes:
The WPF version:
#region Assembly System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.1\System.ComponentModel.DataAnnotations.dll
#endregion
The NET Standard 2.0 version:
#region Assembly System.ComponentModel.Annotations, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// C:\Users\a0110\.nuget\packages\system.componentmodel.annotations\4.4.0\ref\netstandard2.0\System.ComponentModel.Annotations.dll
#endregion
It's clear that the same type and namespace are defined in assemblies with different names--not just assembly versions.
How can I get the XAML Designer to successfully locate whatever assembly is required to use IValidatableObject?
Things I have Tried
Installing VS v15.5 preview and targeting the WPF project to .NET 4.7 (also 15.5 preview 2 and 3, .NET 4.7.1)
Adding the old System.ComponentModel.DataAnnotations reference to the WPF project (with and without the NuGet version)
reverting back to packages.config format (this didn't actually succeed; it appears that I'm stuck with PackageReference!)
grabbing a copy of the System.ComponentModel.Annotations.dll from the project's output folder and referencing it directly (VS would not let me do this)
adding a bindingRedirect to my App.config
adding <DependsOnNETStandard>True</DependsOnNETStandard> to the .csproj
adding <DependsOnNETStandard>netstandard2.0</DependsOnNETStandard> to .csproj
adding <_HasReferenceToSystemRuntime>true</_HasReferenceToSystemRuntime> to .csproj
adding the NETStandard.Library NuGet package to the WPF project
Update
For anyone else who is plagued by this issue, I have found a workaround:
Locate the System.ComponentModel.Annotations.dll on your hard drive that your NET Standard project uses for IValidatableObject. Copy it to a location within your project.
Uninstall the System.ComponentModel.Annotations NuGet package from your solution
Give your NET Standard project a direct reference to DLL you copied
Give your WPF project a reference to the standard assembly System.ComponentModel.DataAnnotations
Upgrade your WPF project to target .NET 4.7.1
Compile. Your WPF design-time should be free from this error.
.

Build MEF plugins without RebuildAll

I have MEF-modules (assemblies) in same solution as Main WPF Application. Modules reference Main, so they can implement IModule used by MEF.
Since MainApp does not reference IModule implementations, they are only build on Clean + RebuildAll - not normal Build (F5). And I would like it to.
What is the best way to fix this?
Go to Solution Explorer and right click your MainApp project. Select "Build Dependencies" and then "Project Dependencies". Then check all the projects that contain IModule implementations.
This tells Visual Studio to build these projects before building your MainApp project (if any modifications have been made to these projects).

Installing Custom fonts into System

I am having custom fonts(.ttf file) in my WPF application. I am able to use those fonts in my application but now I need to install these fonts in system. How do I install custom fonts into machine from my WPF C# code?

Calling app_code folder from web application project

I am developing a module for DotNetNuke and have used a DotNetNuke Compiled Module template to create the module in the DesktopModule folder.
I then get a Web Application Project under the DNN website in my Visual Studio 2008.
Now I want to use DAL and BLL which are created in DNN app_code folder.
But when I add them in code behind it can't find them.
How do I tell my Web Application Project to access the app_code folder in the website "projcet"?
Thanks in advance!
You can't. App_Code is compiled on-the-fly, but even if you compile it prior to deployment somehow, you will have a circular reference (App_Code -> Web Application -> App_Code).
In the web application the Components folder seems to do what app_code folder does.

use Silverlight Toolkit custom build

How do I use a custom build of the Silverlight Toolkit to build my Silverlight project?
I'd like to be able to step into Toolkit code while debugging.
Go to the SourceCode tab and get the latest build for Toolkit.But you will have to reference Toolkit Project in you Working project to be able step into toolkit code while debug .
Here you can find latest builds list:
http://silverlight.codeplex.com/SourceControl/list/changesets

Resources