Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
These questions (paraphrased) have come up a bunch of times so it’s not that hard to find the answer, but I just rediscovered them so it’s on topic for today.
“I want to add a namespace to the Imports designer automatically at design time, so the user doesn’t have to do it manually. How can I do that?”
“I modified a workflow using C# code to add/remove VB expressions. None of my VB expressions work at runtime because it can’t resolve the types involved (e.g. System.Collections.ObjectModel.Collection)”
…and https://support.microsoft.com/kb/2015702 etc.
The code’s pretty simple:
But needs one word of explanation. What is ‘rootObject’? RootObject is the root of your workflow definition, i.e. it should usually be the ActivityBuilder object. But in the case of a workflow Service (I guess you’re generating a XAMLX file?) there is no ActivityBuilder, and I believe it would either be the Service… I think (unchecked fact).
/// <summary>
/// Useful to patch up your non-designer generated workflow with any missing VB namespaces it needs.
/// </summary>
public static void AddVBNamespaceSettings(object rootObject, params Type[] types)
{
var vbsettings = VisualBasic.GetSettings(rootObject);
if (vbsettings == null)
{
vbsettings = new VisualBasicSettings();
}
foreach (Type t in types)
{
vbsettings.ImportReferences.Add(
new VisualBasicImportReference
{
Assembly = t.Assembly.GetName().Name,
Import = t.Namespace
});
}
VisualBasic.SetSettings(rootObject, vbsettings);
}
You can also use it on a manually constructed DynamicActivity object, if e.g. you just want to build a DynamicActivity for execution and skip ActivityBuilder.
Other examples:
There’s a more extensive example by Frank Holden on the forums which does a little extra stuff, it’s designed to monitoring assemblies added as assembly references to your workflow in a rehosted app.
Comments
Anonymous
November 02, 2011
I was looking for it! Thank you,Anonymous
November 16, 2011
This is great tip. Any way that I could dynamically add in a URI type namespace, rather than a CLR type namespace? For example, instead of adding in System.Collections.ObjectModel.Collection, I'd like to add in http://someMSURI/Anonymous
June 16, 2013
Does not work on Rehosted Designer....