【发布时间】:2017-10-09 21:45:52
【问题描述】:
我们目前在多个项目中使用一些共享的 T4 文件。这些文件现在存在于各种 git 存储库中,因此我们希望通过 nuget 分发它们。
使用这些文件作为内容创建一个 nuget 包可以正常工作,但随后我会在每个项目中获得这些 T4 的单独副本。不幸的是,每个存储库的项目数量仍然很高,因此我们会得到数百个文件重复项。这会减慢克隆和签出操作。
我试图找到一种与 Nunit3TestAdapter 类似的方法:只需将文件部署在 nuget 包的 libs 文件夹中,但不要更改项目中的任何内容。
这样我们就可以只拥有这些共享文件的一个副本。
如何在 nuspec 文件中进行管理?一旦我没有要添加到项目中的文件,我就会收到消息“您正在尝试将此包安装到以 '.NETFramework,Version=v4.0' 为目标的项目中,但该包不包含任何程序集与该框架兼容的参考或内容文件。有关更多信息,请联系包作者。"
这是我当前的 nuspec 文件(当我们通过 TFS 构建包时替换了 $ 变量):
<?xml version="1.0"?>
<package>
<metadata>
<id>$SolutionName$</id>
<version>$Version$</version>
<authors>$SSH$</authors>
<owners>$SSH$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Softship common T4 templates. Current Version: $Version$</description>
<copyright>Copyright $date$</copyright>
<!-- Do not list this as dependency of other nuget -->
<developmentDependency>true</developmentDependency>
</metadata>
<files>
<file src="build/net35/MultipleOutputHelper.ttinclude" target="build\net35" />
<file src="build/net35/GenerateTextMessages.ttinclude" target="build\net35" />
<file src="build/net35/DataModelRelationsGenerator.ttinclude" target="build\net35" />
<file src="build/net35/DataModelGenerator.ttinclude" target="build\net35" />
</files>
</package>
【问题讨论】:
-
您使用的是哪个版本的 NuGet?如果 NuGet 认为构建文件夹不足以允许安装继续,我怀疑您可能必须放置一个虚拟的
lib/net35/_._占位符才能安装它。各种 .NET Core NuGet 包都使用这种技术 - 不提供程序集,但它允许将 NuGet 包安装到项目中。示例是 System.Xml.Document。_._只是一个空文件。 -
我试过
<files> <file src="tools/MultipleOutputHelper.ttinclude" target="tools" /> <file src="tools/GenerateTextMessages.ttinclude" target="tools" /> <file src="tools/DataModelRelationsGenerator.ttinclude" target="tools" /> <file src="tools/DataModelGenerator.ttinclude" target="tools" /> </files>,效果很好。