Artur Mustaifn 的个人资料.NET Tips and Tricks日志列表网络 工具 帮助

日志


12月16日

Saturday morning

My hoildays started so good, that I wrote a poem for my lovely wife:
 
 
Indira is my house wife
She cooks me every morning
I've never seen in all my life
More beaty than she's scoring
 
The deepest thought can break apart
When morning sun in shining...
Or when Indira comes, my heart
Is beating like a lightning!
12月15日

Working History

Hello, geeks!

Problem with ProxyGen:

ProxyGen.exe Error: 0 : Error: Generics are not supported. Type IParent`1 contains generic parameters and will be excluded. Its occurrences will be replaced by
 System.Object.

This is a real-world sample:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
using System.Collections.Generic;
using System.Text;

namespace Ngt.Svd.Kernel2.Data
{
public interface IDepartments : ICollection<IDepartment> { }
public interface IDictionaries : ICollection<IDictionary> { }
public interface IDictionaryGroups : ICollection<IDictionaryGroup> { }
public interface IJournals : ICollection<IJournal> { }
public interface IJournalGroups : ICollection<IJournalGroup> { }
public interface IActionGroups : ICollection<IActionGroup> { }
public interface IForms : ICollection<IForm> { }
public interface IAttributes : ICollection<IAttribute> { }
}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
using System.Collections.Generic;
using System.Text;

namespace Ngt.Svd.Kernel2.Data
{
public interface IEntity {}
public interface IParent<T> where T : IEntity { T Parent { get; } }
public interface IDepartmentParent : IParent<IDepartment>, IEntity { }
public interface IDictionaryParent : IParent<IDictionaryGroup>, IEntity { }
public interface IFormParent : IParent<IActionGroup>, IEntity { }
public interface IJournalParent : IParent<IJournalGroup>, IEntity { }
public interface IAttributeParent : IParent<IJournal>, IEntity { }
public interface IDictionary : IDictionaryParent { }
public interface IDictionaryGroup : IDepartmentGroup
{
IDictionaries Dictionaries { get; }
}
public interface IJournal : IJournalParent
{
IForms Forms { get; }
IAttributes Attributes { get; }
}
public interface IJournalGroup : IDepartmentGroup
{
IJournals Journals { get; }
}
public interface IAttribute : IAttributeParent
{
IDictionary Dictionary { get; }
}
public interface IActionGroup : IDepartmentGroup
{
IForms Forms { get; }
}
public interface IForm : IFormParent
{
IJournal Journal { get; }
}
public interface ILinearForm : IForm { }
public interface ITableForm : IForm { }
public interface IDepartment : IDepartmentGroup
{
IDictionaryGroups DictionaryGroups { get; }
IJournalGroups JournalGroups { get; }
IActionGroups ActionGroups { get; }
}
public interface IDepartmentGroup : IDepartmentParent
{
IDepartments Departments { get; }
}
}

Solution:

if someone have generics interfaces, and even classes, it is possible to create an addditional assembly (non-generics to generics layer), strong named it and add a reference to original assembly in proxy configuration. I my case it simply adds an an additional surface. Bisimilla!

Shown below:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Text;

using System.Windows.Forms;
using VSTADTEProvider.Interop;
using EnvDTE;
using EnvDTE80;
using System.IO;
using Microsoft.VisualStudio.Tools.Applications;
using Microsoft.VisualStudio.Tools.Applications.ExternalProcess;
using Microsoft.VisualStudio.Tools.Applications.DesignTime.Interop;
using Microsoft.VisualStudio.Tools.Applications.Contract;

using Ngt.Svd.Kernel2.Data;

namespace Ngt.Svd.Kernel2.Proxy
{
public interface IEntityProxy : IEntity { }
public interface IDepartmentParentProxy : IDepartmentParent { }
public interface IDictionaryParentProxy : IDictionaryParent { }
public interface IFormParentProxy : IFormParent { }
public interface IJournalParentProxy : IJournalParent { }
public interface IAttributeParentProxy : IAttributeParent { }
public interface IDictionaryProxy : IDictionary { }
public interface IDictionaryGroupProxy : IDictionaryGroup { }
public interface IJournalProxy : IJournal { }
public interface IJournalGroupProxy : IJournalGroup { }
public interface IAttributeProxy : IAttribute { }
public interface IActionGroupProxy : IActionGroup { }
public interface IFormProxy : IForm { }
public interface ILinearFormProxy : ILinearForm { }
public interface ITableFormProxy : ITableForm { }
public interface IDepartmentProxy : IDepartment { }
public interface IDepartmentGroupProxy : IDepartmentGroup { }
}

So my VSTA proxy uses Data Proxy Layer, not a Data Layer due to the generics and therefore ProxyGen.exe generates a TypeInfrastructureManager class in a ordinal way. All we need to do is to cast back each time we are using a ...Proxy version of an interface or impement GetInterface() in each of interfaces for safely typecasting of this references ;)

Now I'm thinking about desighn for beautify my code. But it really works, in cost of additional casting. Most of them must be eliminated by the comiler if classes and interface will be properly desighned. This is not a lot of work to do, in fact.

Bye!

VSTA SDK and VM

Hello, geeks!
 
I just got the running instance of WinXP SP2 with VS2005 an August VS2005 SDK installed!
 
So I love virtual machines!
 
If someone interested in my history of creating and using Visual Studin Tools for Application, contact me, or leave the message :)
12月14日

VSTA Documentation

Hi, phanks you for all your help, but I got a serious trouble lanching VSTA Help.

Before I get this issue, I had all Visual Studio SDKs installed on host machine. Actually, I had all-in-one system, including VS2005 Enterprise/Developer/Tester/Architector/Premier Partner Editions, Visual Source Safe 2005, MSDN Library 2005, Virtual Server 2005 R2, VSTO, VSTA, NF3.0, WPF, VS2005 Extension for WPF, ODP for .NET 2.0, Oracle Developers Tools VS2005 10.2, IE7, VS2005 Team Explorer, Microsoft Espression Desighn, SQL Server 2005 Enterprise, e.t.c.

I'm a Pro Developer, and started to

I did not expect that something is working as not expected except VSTA and VSTA docs.

I deinstalled all VS SDK, VSTA, VSTO, all documentation libraries, it makes my tiers running on my heart :~(.

See my next blogs