如何创建一个包含链接文件的Visual Studio项目模板?

17
在Visual Studio 2010中,我想创建一个项目模板,其中包含链接到两个应该存在于系统上的文件。 其中一个是常见的AssemblyInfo.cs文件。 另一个是强名称密钥文件(*.snk)。
我需要这些引用是相对的,因为每个开发人员的工作区设置都会有所不同。 项目模板是否可以以某种方式找出这些文件在每位开发人员环境中的位置呢?
从阅读有关模板的信息来看,它们似乎是比较静态的,因此我想知道是否可以使用一些技巧来完成这样的事情。如果什么都做不了,我可以添加虚假引用,这将导致编译错误,并强制开发人员将这些文件挂接进来。但如果我可以替他们完成,那就更好了。
3个回答

19
你应该在vstemplate中将CreateInPlace属性设置为truedocumentation中指出:

指定是在指定位置创建项目并执行参数替换,还是在临时位置执行参数替换,然后将项目保存到指定位置。

如果你想让相对路径起作用,需要在创建项目的位置进行参数替换,而不是在临时位置进行替换。

1
正是我所需要的,感谢。关于MSDN文档,只是一个快速的注释,它指出默认值为true,但似乎在VS 2012项目模板中实际上是false。 - Adrian Smith
CreateInPlace在VC++项目模板中存在问题。已确认为错误:http://connect.microsoft.com/VisualStudio/feedback/details/789683/problem-with-createinplace-tag-in-project-template - makhdumi

2

微软已确认这是可扩展模型和项目模板的一个错误。我使用了IWizard来解决这个问题。在我的IWizard实现的RunFinished方法中,我添加了以下代码:

    //Get linked file directory
    string coreDir = Path.GetDirectoryName(MyProject.FullName);

    //Data folder
    ProjectItem propertiesProjectItem = slSharedProject.ProjectItems.Cast<ProjectItem>().Where(p => p.Name == "Data").First();
    propertiesProjectItem.ProjectItems.AddFromFile(coreDir + @"\Service\TheFileIWantToLink.cs");

这段代码将TheFileIWantToLink.cs文件链接到我的共享Silverlight项目(slSharedProject)中。

1
你可以尝试将向导集成到项目模板中,并设置链接文件的路径。如果我没记错的话,你不需要创建用户界面;你只需要在replacementsDictionary中指定正确的替换值,VS就会替换模板文件中的值。请参见thisthis获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接