ProjectBase файлы в проекте Nemerle.VsIntegration
От: Nuald Россия http://nuald.blogspot.com
Дата: 26.09.06 01:44
Оценка:
Все файлы в этом каталоге являются частью VS SDK, а в проекте просто указаны линки на них. Позволительно ли заменить эти линки реальными файлами, подправленными для наших нужд?
Например, для того, чтобы нормально собиралось Windows Forms приложение на Немерле, необходимо имплементировать пару свойств в OAReferenceBase.cs. Возможно, есть другой путь, однако мне все-таки почему-то кажется что в любом случае необходимо импортировать эти файлы в проект в полноценном виде, чтобы интеграция полностью заработала в нужной нам мере.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: ProjectBase файлы в проекте Nemerle.VsIntegration
От: IT Россия linq2db.com
Дата: 26.09.06 03:26
Оценка:
Здравствуйте, Nuald, Вы писали:

N>Все файлы в этом каталоге являются частью VS SDK, а в проекте просто указаны линки на них. Позволительно ли заменить эти линки реальными файлами, подправленными для наших нужд?

N>Например, для того, чтобы нормально собиралось Windows Forms приложение на Немерле, необходимо имплементировать пару свойств в OAReferenceBase.cs. Возможно, есть другой путь, однако мне все-таки почему-то кажется что в любом случае необходимо импортировать эти файлы в проект в полноценном виде, чтобы интеграция полностью заработала в нужной нам мере.

А унаследоваться от этих файлов никак?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: ProjectBase файлы в проекте Nemerle.VsIntegration
От: Nuald Россия http://nuald.blogspot.com
Дата: 26.09.06 05:41
Оценка:
Здравствуйте, IT, Вы писали:

IT>А унаследоваться от этих файлов никак?


Хм, не помогает. Создал новый класс:
[ComVisible(true)]
public class CustomReferenceBase<RefType> : OAReferenceBase<RefType> where RefType : ReferenceNode
{
    public CustomReferenceBase(RefType referenceNode)
        : base(referenceNode) { }

    public override string PublicKeyToken
    {
        get { return String.Empty; }
    }
}

Оригинальный OAReferenceBase сказал не компилировать (удалить ссылку на него почему-то не получается), но все-равно выскакивает исключение именно на его свойстве PublicKeyToken. Плюс к тому же, непонятно, где создается или используется этот класс. Стек вызовов:

    Nemerle.VsIntegration.dll!Microsoft.VisualStudio.Package.Automation.OAReferenceBase<Microsoft.VisualStudio.Package.AssemblyReferenceNode>.PublicKeyToken.get() Line 129 + 0x2f bytes    C#
     [External Code]    
     Nemerle.VsIntegration.dll!Microsoft.VisualStudio.Package.FileDocumentManager.Open(bool newFile = false, bool openWith = false, uint editorFlags = 0, ref System.Guid editorType = {00000000-0000-0000-0000-000000000000}, string physicalView = null, ref System.Guid logicalView = {7651a702-06e5-11d1-8ebd-00a0c90f26ea}, System.IntPtr docDataExisting = 0, out Microsoft.VisualStudio.Shell.Interop.IVsWindowFrame windowFrame = null, Microsoft.VisualStudio.Package.WindowFrameShowAction windowFrameAction = DontShow) Line 230 + 0x7f bytes    C#
     Nemerle.VsIntegration.dll!Microsoft.VisualStudio.Package.FileDocumentManager.Open(bool newFile = false, bool openWith = false, ref System.Guid logicalView = {7651a702-06e5-11d1-8ebd-00a0c90f26ea}, System.IntPtr docDataExisting = 0, out Microsoft.VisualStudio.Shell.Interop.IVsWindowFrame windowFrame = null, Microsoft.VisualStudio.Package.WindowFrameShowAction windowFrameAction = DontShow) Line 168 + 0x24 bytes    C#
     Nemerle.VsIntegration.dll!Microsoft.VisualStudio.Package.FileDocumentManager.Open(ref System.Guid logicalView = {7651a702-06e5-11d1-8ebd-00a0c90f26ea}, System.IntPtr docDataExisting = 0, out Microsoft.VisualStudio.Shell.Interop.IVsWindowFrame windowFrame = null, Microsoft.VisualStudio.Package.WindowFrameShowAction windowFrameAction = DontShow) Line 62 + 0x17 bytes    C#
     Nemerle.VsIntegration.dll!Microsoft.VisualStudio.Package.ProjectNode.OpenItem(uint itemId = 9, ref System.Guid logicalView = {7651a702-06e5-11d1-8ebd-00a0c90f26ea}, System.IntPtr punkDocDataExisting = 0, out Microsoft.VisualStudio.Shell.Interop.IVsWindowFrame frame = null) Line 4549 + 0x12 bytes    C#
     Nemerle.VsIntegration.dll!Microsoft.VisualStudio.Package.Automation.OAFileItem.Open(string viewKind = "{7651A702-06E5-11D1-8EBD-00A0C90F26EA}") Line 197 + 0x41 bytes    C#
     Nemerle.VsIntegration.dll!Nemerle.VisualStudio.Project.NemerleOAFileItem.Open(string viewKind = "{00000000-0000-0000-0000-000000000000}") Line 43 + 0xe bytes    C#
     [External Code]

Т.е. идет код:
result = uiShellOpenDocument.OpenStandardEditor((uint)openFlags, fullPath, ref logicalView, caption, this.Node.ProjectMgr, this.Node.ID, docDataExisting, serviceProvider, out windowFrame);

Потом внешний код, и за ним сразу:
public virtual string PublicKeyToken
{
    get { throw new Exception("The method or operation is not implemented."); }
}

Как я понял, здесь внутри студии происходит обращение к COM-объекту, который скорей всего и представляет собой OAReferenceBase. Однако это не помогает понять, как правильно решить эту проблему.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: ProjectBase файлы в проекте Nemerle.VsIntegration
От: IT Россия linq2db.com
Дата: 26.09.06 11:30
Оценка:
Здравствуйте, Nuald, Вы писали:

N>Хм, не помогает. Создал новый класс:


А кто создаёт OAReferenceBase?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re: ProjectBase файлы в проекте Nemerle.VsIntegration
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 12:41
Оценка:
Здравствуйте, Nuald, Вы писали:

N>Все файлы в этом каталоге являются частью VS SDK, а в проекте просто указаны линки на них. Позволительно ли заменить эти линки реальными файлами, подправленными для наших нужд?


Нет. Править фалы VS SDK ни в коем случае нельзя. Они еще сто раз будут изменяться, и не нами.
Пока что все проблемы с их классами прекрасно обходились созданием наследников и переопределением виртуальных методов.

N>Например, для того, чтобы нормально собиралось Windows Forms приложение на Немерле, необходимо имплементировать пару свойств в OAReferenceBase.cs.


Что конкретно нужно?

N> Возможно, есть другой путь,


Есть. От OAReferenceBase унаследованы:
* OAAssemblyReference -> AssemblyReferenceNode.
* OAComReference.
* OAProjectReference -> OAProjectReference.

OAComReference создается в:
VisualStudioIntegration\Common\Source\CSharp\Project\ComReferenceNode.cs

OAProjectReference создается в:
VisualStudioIntegration\Common\Source\CSharp\Project\ProjectReferenceNode.cs

Далее переопределяешь свойства там где уже есть классы и создаешь новые классы наследники старых там где их еще нет. Чтобы создавался твой класс, в уаазанных файлах нужно переопределить фабричные методы:
internal override object Object

N> однако мне все-таки почему-то кажется что в любом случае необходимо импортировать эти файлы в проект в полноценном виде, чтобы интеграция полностью заработала в нужной нам мере.


Я уже много раз говорил — это плохая идея.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: ProjectBase файлы в проекте Nemerle.VsIntegration
От: Nuald Россия http://nuald.blogspot.com
Дата: 26.09.06 23:53
Оценка:
Здравствуйте, IT, Вы писали:

IT>А кто создаёт OAReferenceBase?


Знал бы, проблему бы уже решил
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: ProjectBase файлы в проекте Nemerle.VsIntegration
От: IT Россия linq2db.com
Дата: 26.09.06 23:57
Оценка: +1 :)
Здравствуйте, Nuald, Вы писали:

IT>>А кто создаёт OAReferenceBase?


N>Знал бы, проблему бы уже решил


Так поставь у этой хрени брыкпоинт в констукторе и сиди себе в засаде.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: ProjectBase файлы в проекте Nemerle.VsIntegration
От: Nuald Россия http://nuald.blogspot.com
Дата: 27.09.06 00:09
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Что конкретно нужно?


Переопределить свойства PublicKeyToken и еще парочку каких-то. Сейчас не хочу экспериментировать, чтобы не попортить инсталляцию VS SDK.

VD>Далее переопределяешь свойства там где уже есть классы и создаешь новые классы наследники старых там где их еще нет. Чтобы создавался твой класс, в уаазанных файлах нужно переопределить фабричные методы:

VD>internal override object Object

Вот этот пункт не понял. Во-первых, какие файлы надо править? Наследников? Во-вторых, OAReferenceBase и его наследники не содержат метод Object. Как я могу его переопределить.
И, кхм, как вообще можно сделать такое переопределение? Тут MSDN говорит:

An internal virtual method can be overridden in some languages, such as textual Microsoft intermediate language (MSIL) using Ilasm.exe, even though it cannot be overridden using C#.


N>> однако мне все-таки почему-то кажется что в любом случае необходимо импортировать эти файлы в проект в полноценном виде, чтобы интеграция полностью заработала в нужной нам мере.

VD>Я уже много раз говорил — это плохая идея.

Я не сомневаюсь, что это плохая идея, просто интересно узнать, как порешать эту проблему. Впрочем, основную идею я понял, будем копать...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: ProjectBase файлы в проекте Nemerle.VsIntegration
От: Nuald Россия http://nuald.blogspot.com
Дата: 27.09.06 00:15
Оценка:
Здравствуйте, Nuald, Вы писали:

N>И, кхм, как вообще можно сделать такое переопределение? Тут MSDN говорит:

N>

N>An internal virtual method can be overridden in some languages, such as textual Microsoft intermediate language (MSIL) using Ilasm.exe, even though it cannot be overridden using C#.


Хм, плохие писатели в МСДН-е Беру свои слова обратно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: ProjectBase файлы в проекте Nemerle.VsIntegration
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.09.06 11:33
Оценка:
Здравствуйте, Nuald, Вы писали:

N>Хм, плохие писатели в МСДН-е Беру свои слова обратно.


Так вопросы еще остались?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: ProjectBase файлы в проекте Nemerle.VsIntegration
От: Nuald Россия http://nuald.blogspot.com
Дата: 27.09.06 23:17
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Так вопросы еще остались?

Нет, проблему уже решил. Классы переопределил, полет нормальный.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: ProjectBase файлы в проекте Nemerle.VsIntegration
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.06 15:25
Оценка:
Здравствуйте, Nuald, Вы писали:

N>Нет, проблему уже решил. Классы переопределил, полет нормальный.


Ну, и славно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.