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

Posted

技术标签:

【中文标题】如何创建包含链接文件的 Visual Studio 项目模板?【英文标题】:How do I create a Visual Studio project template that includes linked files? 【发布时间】:2011-09-01 23:28:17 【问题描述】:

在 Visual Studio 2010 中,我想创建一个项目模板,其中包含 指向系统上应该存在的两个文件的链接。其中之一是通用的 AssemblyInfo.cs 文件。另一个是强名称密钥文件 (*.snk)。

我需要这些引用是相对的,因为每个开发人员的工作区设置不同。项目模板是否有可能以某种方式找出这些文件在每个开发人员环境中的位置?

从阅读有关模板的内容来看,它们听起来像是相当静态的,所以我想知道是否可以采取一些技巧来做这样的事情。如果不出意外,我可以添加会导致编译错误并迫使开发人员挂钩这些文件的虚假引用。但如果我能为他们做这件事,那就更好了。

【问题讨论】:

你找到解决办法了吗? 【参考方案1】:

您应该在 vstemplate 中将 CreateInPlace 属性设置为 true。 documentation 说

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

如果您希望相对路径起作用,则需要在您创建项目的地方进行参数替换,而不是在临时位置

【讨论】:

找到我需要的东西,干杯。只是关于 MSDN 文档的快速说明,它指出默认值为 true,但对于 VS 2012 项目模板,它似乎实际上是 false。 CreateInPlace 对于 VC++ 项目模板已损坏。确认为错误:connect.microsoft.com/VisualStudio/feedback/details/789683/…【参考方案2】:

Microsoft 已确认这是可扩展性模型和项目模板的错误。我设法通过使用 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)。

【讨论】:

【参考方案3】:

您可以尝试将向导集成到您的项目模板中并设置链接文件的路径。如果我没记错的话,您不必创建用户界面;您只需在 replacementsDictionary 中指定正确的替换,VS 将替换模板文件中的值。请参阅this 或this 了解更多信息。

【讨论】:

以上是关于如何创建包含链接文件的 Visual Studio 项目模板?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Visual Studio Code 创建和链接另一个网页?

导出的 Visual Studio 模板中缺少 .lib 文件

Visual Studio 2010 C++:如何判断链接器实际尝试链接的 LIB 文件?

如何在 Visual Studio 2008 中打开使用 Visual Studio 2005 创建的 rdl?

如何缩短 Visual Studio 中的链接过程

Visual Studio Code 不包含 C 头文件