Visual studio 2010 在项目模板中包含对我自己的程序集的引用的最佳方式是什么?

Visual studio 2010 在项目模板中包含对我自己的程序集的引用的最佳方式是什么?,visual-studio-2010,project-template,visual-studio-templates,Visual Studio 2010,Project Template,Visual Studio Templates,我们已经用C#开发了一个库,现在我想创建一个项目模板来帮助正确使用库 我希望新项目包含对库程序集的引用,但不希望将程序集部署到GAC,也不希望依赖驻留在某个特定位置的程序集 我的想法是在项目模板.zip文件中包含.dll。这意味着它将在新项目的项目文件夹中的某个地方结束。可能在一个名为Lib的文件夹中。然后,项目文件中的引用提示可以指向该文件夹。这是个好主意吗?今后我可能会面临哪些问题 是否有某种机制可以在项目模板中包含我不知道的第三方库?你是如何解决这个问题的?当然我不是第一个。我过去必须解决

我们已经用C#开发了一个库,现在我想创建一个项目模板来帮助正确使用库

我希望新项目包含对库程序集的引用,但不希望将程序集部署到GAC,也不希望依赖驻留在某个特定位置的程序集

我的想法是在项目模板.zip文件中包含.dll。这意味着它将在新项目的项目文件夹中的某个地方结束。可能在一个名为Lib的文件夹中。然后,项目文件中的引用提示可以指向该文件夹。这是个好主意吗?今后我可能会面临哪些问题


是否有某种机制可以在项目模板中包含我不知道的第三方库?你是如何解决这个问题的?当然我不是第一个。

我过去必须解决这个问题。在一个例子中,它是一个安装到GAC的日志库,这意味着引用元素只需要程序集名称。在另一种情况下,我们将库安装到文件系统中,创建了一个包含该位置的注册表项(以防用户变得可爱并更改了我们的安装位置),并使用查找注册表项和填充替换项,以便在引用的HintPath中具有正确的位置。(注意:模板向导方法要求您将向导的程序集安装到GAC,这听起来像是在试图避免…)


如果您不希望将库安装在GAC或特定位置,那么在项目中包含程序集的方法几乎是您剩下的唯一选择。从积极的一面来看,项目模板的部署相当简单,您不必使用GAC、自定义向导等。从消极的一面来看,如果您创建了库的新版本,用户需要更新每个项目的库副本。

答案多少取决于您计划如何部署模板。您正在使用VSIX吗?您使用的是MSI(Windows Installer)还是其他通用部署技术?您是否计划只分发zip文件并提供手动安装说明?安装到GAC的含义是什么?避免它的原因是什么?主要的含义是安装到GAC的程序集副本“获胜”。也就是说,你的应用程序文件夹中可能有一个更新的副本,但只要强名称匹配,运行时将优先从GAC加载副本。一个大致类似的示例是,如果GAC’ed程序集的路径是path变量中的第一个条目,并且您发出了LoadLibrary调用。当您尝试更新二进制文件时,这可能会导致奇怪的行为,而且这种行为神秘地没有改变。此外,尽管这不是GAC的直接问题,但使用强名称意味着您的程序集现在需要一个与编译它所依据的强名称相匹配的程序集;您必须重新编译或注册将绑定重定向到较新版本的发布者策略。