[英]Including a Folder in NuGet Package and have it install into project as file .netcore/Razor
我正在使用 Visual Studio 2019 並使用此方法成功創建 NuGet 包:
一切正常,但也有一些設置( .json
包含在目錄中)文件PageSettings/
當我發布 NuGet 包然后將其安裝到新項目中時,此目錄在 VS 中顯示為linked item
(參見圖片)。 因此,作為用戶,我可以訪問這些文件,但在項目運行時它們不“存在”。
這意味着如果我在沒有物理復制和添加這些文件的情況下運行這個項目,我會得到ArgumentException: The directory name 'Path-To-project\\pagesettings' does not exist. (Parameter 'Path')
ArgumentException: The directory name 'Path-To-project\\pagesettings' does not exist. (Parameter 'Path')
我可以理解為什么會發生這種情況,但無法弄清楚如何改變它,或者如果可能的話。
上面鏈接的文章建議將代碼添加到csproj
文件中,例如:
<ItemGroup>
<Content Include="readme.txt">
<Pack>true</Pack>
<PackagePath>\</PackagePath>
</Content>
</ItemGroup>
但是,這並不工作,並在事實上似乎沒有必要,因為包命令,包括我的文件,只是沒有安裝適當的時候創建它們。
此外 - 如果有辦法告訴 VS 提示是否安裝此文件,那將非常方便。 由於它是設置,如果用戶更改設置然后安裝更新版本的我的 NuGet 包,我不希望它覆蓋他們的自定義設置......也許這就是鏈接設計發生的原因......如果是這樣,如果有人可以確認嗎?
實際上,您應該在 nuget 包中創建一個.props
文件。
1)在您的 nuget 項目中創建一個名為 <package_id>.props 的文件。
像這樣:
注意:如果您創建的 nuget 包名為test.1.0.0.nupkg
,則該文件應命名為test.props
以便它可以工作。
2)在test.props
文件中添加這些:
<Project>
<Target Name="CopyFiles" BeforeTargets="Build">
<ItemGroup>
<File Include="$(MSBuildThisFileDirectory)..\Pagesettings\*.*"></File>
</ItemGroup>
<Copy SourceFiles="@(File)" DestinationFolder="$(ProjectDir)Pagesettings"></Copy>
</Target>
</Project>
3)在xxx.csproj
文件中添加這些:
<ItemGroup>
<None Include="Pagesettings\*.*(the json files' path of your nuget project)" Pack="true" PackagePath="Pagesettings">
</None>
<None Include="build\*.*" Pack="true" PackagePath="build"></None>
</ItemGroup>
然后重新安裝您的項目。
4)然后清理 nuget 緩存或刪除C:\\Users\\xxx(current user)\\.nuget\\packages
下的所有文件。
5)當您安裝這個新版本的 nuget 包時,請再次構建您的主項目以運行目標以生成文件。
此外,還有一個類似的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.