我已经设法使用VS2010 SDK和TemplateWizard为我们的Silverlight解决方案创建了一个多项目模板。我的问题是如何自动将Silverlight项目与Web项目链接?我有两个模板:一个用于主机Web项目,另一个用于SL项目。麻烦的是我无法获取Silverlight项目GUID,以便在Web项目文件中包含的SilverlightApplicationList标记中设置它。我已尝试通过TemplateWizard设置Silverlight项目GUID,但在创建Silverlight项目时,GUID始终会重新生成。
答案 0 :(得分:0)
我找到了一个解决方案,通过.NET Reflector运行Microsoft.VisualStudio.ServiceModel.DomainServices.Tools.dll。我认为现有的Silverlight模板必须使用某种机制将SL项目链接到Web项目。我已经在我的IWizard实现上的RunFinished方法中添加了以下代码,该实现由根项目模板调用:
public void RunFinished()
{
IVsHierarchy hierarchy;
IVsHierarchy hierarchy2;
Project webProject = this.GetProject(this._webProjectName);
Project slProject = this.GetProject(this._slProjectName);
EnvDTE.Properties properties = webProject.Properties;
ProjectItem aspxTestPage = this.GetAspxTestPage(webProject);
if (aspxTestPage != null)
{
properties.Item("WebApplication.StartPageUrl").Value = aspxTestPage.Name;
properties.Item("WebApplication.DebugStartAction").Value = 1;
}
IServiceProvider sp = this._dte2 as IServiceProvider;
IVsSolution service = null;
using (ServiceProvider provider2 = new ServiceProvider(sp))
{
service = provider2.GetService(typeof(IVsSolution)) as IVsSolution;
}
if (((service.GetProjectOfUniqueName(webProject.UniqueName, out hierarchy) == 0) && (hierarchy != null)) && (service.GetProjectOfUniqueName(slProject.UniqueName, out hierarchy2) == 0))
{
(hierarchy as IVsSilverlightProjectConsumer).LinkToSilverlightProject("ClientBin", true, false, hierarchy2 as IVsSilverlightProject);
}
}
此代码适用于此。