C# 如何在Visual Studio 2017中将其他文件添加到NuGet软件包中?
我最近搬到了Visual Studio 2017社区版。它有两个不错的新功能:C# 如何在Visual Studio 2017中将其他文件添加到NuGet软件包中?,c#,visual-studio-2017,nuget-package,C#,Visual Studio 2017,Nuget Package,我最近搬到了Visual Studio 2017社区版。它有两个不错的新功能: 您不需要在csproj中显式地包含源文件。它会自动执行此操作 它可以直接构建NuGet包 我想把我的开源CodeFirstWebFrameworkDLL打包成一个NuGet包。除了包含DLL,软件包还必须包含其他文件(包括.js、.tmpl、.css和.md文件)的完整目录树 如何告诉Visual Studio我希望在包中包含此目录树 根据我通过广泛搜索找到的信息,并忽略所有涉及向csproj添加文件的过时信息,
CodeFirstWebFramework
DLL打包成一个NuGet包。除了包含DLL
,软件包还必须包含其他文件(包括.js、.tmpl、.css和.md文件)的完整目录树
如何告诉Visual Studio我希望在包中包含此目录树
根据我通过广泛搜索找到的信息,并忽略所有涉及向csproj添加文件的过时信息,我所能找到的只是将它们放在contentFiles
文件夹中,但这似乎不起作用
我的项目文件如下所示:
网络45
真的
尼克洛克
特朗普赫斯特有限公司
易于使用的web服务器用于构建使用c#类生成的sql数据库的web应用程序
2017特朗普赫斯特有限公司。
https://github.com/nikkilocke/CodeFirstWebFramework
https://github.com/nikkilocke/CodeFirstWebFramework
github
C#SQL代码优先Web服务器
我从网上相互冲突和过时的信息中疯狂地猜测我可能需要做什么,我添加了以下内容:
真的
现在,.nupkg
文件中有contentFiles
文件夹的内容(在两个地方,一个是content
文件夹,另一个是contentFiles
文件夹)
但是,当我在另一个项目中安装软件包时,内容文件不会出现,尽管它们列在
obj
文件夹中的project.assets.json
文件中。我现在再次更改了我的项目文件,因此它现在显示:
网络45
真的
尼克洛克
特朗普赫斯特有限公司
易于使用的web服务器用于构建使用c#类生成的sql数据库的web应用程序
2017特朗普赫斯特有限公司。
https://github.com/nikkilocke/CodeFirstWebFramework
https://github.com/nikkilocke/CodeFirstWebFramework
github
C#SQL代码优先Web服务器
真的
真的
内容
真的
总是
内容文件现在已成功复制到下载NuGet软件包的任何项目中的同名文件夹(即contentFiles
)中-不确定哪个指令有效,但其中一个有效
不幸的是,内容在编译时不会自动复制到项目的输出文件夹-欢迎建议。用“内容”和“IncludeInPackage”包装足以将文件复制到包中 首先,请注意,您需要根据NuGet软件包的引用方式将文件放入content或contentFiles文件夹中。见下文 基本上,如果package.config文件引用了NuGet项目,则NuGet包的content文件夹中的文件将复制到引用项目中。如果项目文件中的PackageReference引用了NuGet包,则将使用包中contentFiles文件夹中的文件。建议将两者都包括在内 可以找到contentFiles文件夹的结构。可以指定要复制的文件的语言和框架 因此,在你的情况下:
真的
contentFiles\any\any;内容
我找到了解决方案
下面的第一段代码不足以在目标应用程序上复制文件
<ItemGroup>
<Content Include="contentFiles/**/*.*">
<Pack>true</Pack>
<PackagePath>contentFiles\any\any;content</PackagePath>
</Content>
真的
contentFiles\any\any;内容
解决方案-:这将复制根文件夹上的文件
<ItemGroup>
<Content Include="contentFiles/**/*.*">
<Pack>true</Pack>
<PackagePath>contentFiles;content</PackagePath>
<IncludeInPackage>true</IncludeInPackage>
<CopyToOutput>true</CopyToOutput>
<BuildAction>Content</BuildAction>
<copyToOutput>true</copyToOutput>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
</Content>
真的
内容文件;内容
真的
真的
内容
真的
总是
总是
这对我有用。希望它对您有用。除上述内容外
下图是我的项目内容文件文件夹结构
mycsproj文件的设计
您不需要在csproj中显式地包含源文件,它会自动执行此操作,并且它可以直接构建nuget包-您从哪里读到的?此doco(它是一个.net核心示例,不确定您是否以完整为目标)有几个步骤您是否已将DLL添加到project and Build Output Dir或在csproj中引用了它?例如,“您是否已将DLL添加到project and Build Output Dir或在csproj中引用了它?”-不理解此问题。什么dll?看起来您正在使用.Net Core,dll是否作为依赖项引用?(有时,当您使用非托管DLL时,您会将它们添加到project中,而不是通过引用,而只是添加文件,并将build设置为output,使其最终位于bin文件夹中)。你从哪里得到了我提供的链接?顺便说一句,你评论中的文章清楚地说:免责声明:这只适用于一小部分项目类型。类库项目控制台应用ASP.NET核心web应用.NET核心-我猜你的是类库,对吗?谢谢你的回复。您能告诉我为什么建议同时包含
contentFiles
和content
文件夹吗?消费项目中引用nuget软件包的方式决定了使用哪个文件夹。因此,为了使您的包通过两种引用方式都可用,建议同时添加这两种方式。>在编译时,内容不会自动复制到项目的输出文件夹中,不幸的是-欢迎建议@Nikki Locke看一看,您需要添加未记录的PackageCopyToOutput
开关,以便在引用nuget内容文件的项目中将其标记为“CopyToOutput”:“true”```