找到了许多过时的和/或相关的但还不够充分的解决方案,因此,我会试一试,希望我不要问一个重复的问题。
由于使用NuGet分发了插件,因此需要注意两点:
关于如何完成(1)和(2)的任何建议?
从问题中删除了先前添加的不成功步骤,并发布了答案
答案 0 :(得分:1)
为了实现这一目标,您应该创建一个<package_id>.props文件,该文件可以根据需要将这些文件复制到目标路径中。
1)。在您的 MyPlugin 库项目中,应该在 Build 文件夹下创建一个名为<package_id>.props
的文件。
然后将这些内容添加到该新文件中
<Project>
<Target Name="CopyToFolder" BeforeTargets="Build">
<ItemGroup>
<Files Include="$(MSBuildThisFileDirectory)..\File\*.*"></Files>
</ItemGroup>
<Copy SourceFiles="@(Files)" DestinationFolder="$(ProjectDir)bin\Plugin"></Copy>
</Target>
</Project>
2)将这些节点添加到您的MyPlugin.csproj
文件中:
<ItemGroup>
<None Include="xxx\MyPlugin.dll(the path of MyPlugin.dll in your project)" Pack="true" PackagePath="File"></None>
<None Include="xxx\MyPlugin.config(the path of MyPlugin.dll in your project)" Pack="true" PackagePath="File"></None>
<None Include="Build\MyPlugin.props" Pack="true" PackagePath="build"></None>
</ItemGroup>
3),通过点击打包菜单重新打包 MyPlugin 项目。并且在安装此新版本的nuget软件包之前,您应该首先clean nuget caches或删除C:\Users\xxx(current user)\.nuget\packages
下的所有缓存文件。
除了之外,还有a similar thread you can refer to。
================================================ ====
更新1
有关步骤1的说明:
.props
文件必须命名为package_id
,以便它可以在nuget nupkg文件上使用。请参阅上面提供的链接。
示例,如果您的nuget包名为MyPlugin.1.0.0.nupkg
,则props文件应命名为MyPlugin.props
文件。目标的建议是将文件从nupkg的File文件夹复制到目标主项目的bin\Plugin
文件夹。
有关第2步的说明:
这些步骤将 MyPlugin 项目文件的内容打包到nupkg中。
因此,如果您的MyPlugin.config
位于 MyPlugin 项目的bin \ Release文件夹下,则应使用:
<None Include="bin\Release\netstandard2.0\MyPlugin.config(the path of MyPlugin.dll in your project)" Pack="true" PackagePath="File"></None>
您应确保bin\Release\netstandard2.0\MyPlugin.config
是正确的,并且由于其相对路径(与csproj文件的路径比较),可以找到该文件。
PackagePath =“ File” 表示应将MyPlugin.config
文件打包到nupkg的 File 文件夹中。
<None Include="Build\MyPlugin.props" Pack="true" PackagePath="build"></None>
此步骤是将MyPlugin.props
打包到nupkg文件的build文件夹中。 Please see this document,
Build\MyPlugin.props
表示MyPlugin项目中MyPlugin.props
的文件物理路径,以便nuget可以找到该文件。
The build folder of nupkg (3.x+) MSBuild .targets and .props files Automatically inserted into the project.
所以这是nupkg的功能。
无论如何,此步骤可以由您自己检查,请检查文件路径是否正确,然后确保目标文件位于 File 文件夹中的数量。
这是我的nupkg结构:
=============================================== ======================
也,在安装此新版本的nuget软件包之前,应先清理nuget缓存以删除旧缓存,以防万一您仍安装旧缓存。
之后,首先构建您的主项目以执行目标,然后您将看到我在此处显示的效果。
答案 1 :(得分:1)
找到了解决我问题的几乎全自动解决方案 (特别感谢@ Perry-Qian-MSFT为获得正确指导提供了指导)。
以下是从新手的角度实现这一目标的步骤:
要将“ MyPlugin.config”文件包含到“ .nupkg”中,我已经编辑了“ .csproj”文件并添加了以下内容:
<ItemGroup>
<Content Include="MyPlugin.config">
<Pack>true</Pack>
<PackagePath>MyPlugin.config</PackagePath>
</Content>
</ItemGroup>
此步骤将在nuget包内的“ content ”文件夹下添加“ MyPlugin.config”文件。 请注意,“ MyPlugin.config”文件应放在NuGet项目的根目录下。
这是需要手动编辑的步骤。也会尝试自动执行此操作并更新答案。
打包nuget之后(将其推送到NuGet服务器之前),打开“ nupkg”软件包(使用winzip / winrar / 7zip等),然后将以下内容添加到“ .nuspec”文件中:
<metadata>
<contentFiles>
<files include="MyPlugin.config" copyToOutput="true" />
</contentFiles>
</metadata>
<files>
<file src="MyPlugin.config" target=""/>
</files>
“ MyPlugin.dll”不需要在这里添加,因为它是一个lib文件。
保存该软件包并将其推送到服务器。现在,当“消费者”项目安装NuGet时,配置文件将添加到项目中。在构建项目时,配置文件不会添加到bin目录中。
在此步骤中,使用了“ props”文件。 props文件应打包在NuGet包中,复制到使用者的根目录中,并由使用者项目在构建时执行。
在NuGet的项目中添加“ Directory.build.props”文件,然后编辑“ csproj”以添加以下内容:
<Content Include="Directory.build.props">
<Pack>true</Pack>
<PackagePath>Directory.build.props</PackagePath>
</Content>
编辑“ Directory.build.props”文件的内容:
<Project>
<Target Name="CopyToFolder" AfterTargets="Build">
<ItemGroup>
<ConfigFile Include="$(MSBuildThisFileDirectory)MyPlugin.config"></ConfigFile>
</ItemGroup>
<ItemGroup>
<DllFile Include="$(MSBuildThisFileDirectory)bin\MyPlugin.dll"></DllFile>
</ItemGroup>
<Copy SourceFiles="@(ConfigFile)" DestinationFolder="$(ProjectDir)bin\Plugins"></Copy>
<Move SourceFiles="@(DllFile)" DestinationFolder="$(ProjectDir)bin\Plugins" Condition="Exists('%(FullPath)')"></Move>
</Target>
</Project>
在“ nuspec”文件中添加一个“ Directory.build.props”条目。因此,第2步将增强为:
<metadata>
<contentFiles>
<files include="MyPlugin.config" copyToOutput="true" />
</contentFiles>
<contentFiles>
<files include="Directory.build.props" copyToOutput="true" />
</contentFiles>
</metadata>
<files>
<file src="MyPlugin.config" target="Plugins"/>
<file src="Directory.build.props" target="Plugins"/>
</files>
现在,props文件将最终存储在消费者项目的根目录中。按照惯例,构建项目(MSBuild)时将自动执行“ Directory.build.props”文件。使用“复制”和“移动”任务,“ dll”和“ config”都放置在“ bin / Plugins”文件夹下。
从第0平方开始,我花了很多时间来实现这一目标,希望它也会对其他人有所帮助:)