簡體   English   中英

如何使用t4模板中的roslyn解析當前解決方案?

[英]How can I use roslyn from a t4 template to parse the current solution?

如何從T4模板中獲取當前會話的VisualStudioWorkspace實例? 我希望它能夠解析當前解決方案(即.tt文件所在的解決方案)中的源文件。

從VS包中,我可以使用GetService(SComponentModel)並從中獲取工作區實例,但是當使用以下代碼時,這似乎在T4文件中生成錯誤:

IServiceProvider serviceProvider = (IServiceProvider)this.Host;
var comp = serviceProvider.GetService(typeof(SComponentModel)) as IComponentModel;

返回的錯誤是: System.Runtime.Serialization.SerializationException: Type 'Microsoft.VisualStudio.ComponentModelHost.ComponentModel' in Assembly 'Microsoft.VisualStudio.ComponentModelHost.Implementation, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.

您可以通過設置hostspecific="true"從T4訪問VS IServiceProvider ,然后將this.Host強制this.HostIServiceProvider

細節

但是,這實際上將不起作用,因為您的T4代碼在單獨的AppDomain中運行,而MEF和Roslyn對象將無法使用該代碼。 MarshalByRefObject注入到主VS AppDomain中可能會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM