[英]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.Host
為IServiceProvider
。
但是,這實際上將不起作用,因為您的T4代碼在單獨的AppDomain中運行,而MEF和Roslyn對象將無法使用該代碼。 將MarshalByRefObject
注入到主VS AppDomain中可能會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.