我需要一些帮助来从 ASP.NET Core 6 MVC 项目创建我的 NuGet 包。我创建了一个 MVC 项目,因为我想共享 CSS、JS 和 _Layout 文件。在另一个 MVC 项目中安装包后,我需要 NuGet 复制(或替换)此文件以保持结构。
为了进行测试,我使用 GitHub Packages 来分发 NuGet 包。
我尝试了一些方法(例如this和this、ChatGPT、Codeium Chat和Bing),但没有成功,所以,我的项目有一些不必要的文件和配置(我知道)。
项目结构
ACMELayoutWeb
|-- build
| |-- ACMELayoutWeb.props
| |-- ACMELayoutWeb.targets
|-- wwwroot <- This folder
| |-- cldr-data
| |-- css
| | |-- devextreme
| |-- js
| | |-- devextreme
| |-- acme
| | |-- css
| | | |-- css, min.css, scss
| | |-- js
|-- nuget.config <- ignore this file
|-- ACMELayoutWeb.nuspec
|-- ACMELayoutWeb.props
|-- ACMELayoutWeb.targets
|-- Views
| |-- Shared
| | |-- _Layout.cshtml <- This file
| | |-- ErrorPage.cshtml <- This file will be created soon and need to be copied
我的
.csproj
文件:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
<Authors>ACME</Authors>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageProjectUrl>https://github.com/MY_USER/ACMELayoutWeb</PackageProjectUrl>
<RepositoryUrl>https://github.com/MY_USER/ACMELayoutWeb</RepositoryUrl>
<Title>Layout Sistemas Web ACME</Title>
<Description>Layout para os sistemas web ACME</Description>
<IsPackable>true</IsPackable>
</PropertyGroup>
<ItemGroup>
<None Remove="build\ACMELayoutWeb.targets" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="DevExtreme.AspNet.Core" Version="22.2.4" />
<PackageReference Include="DevExtreme.AspNet.Data" Version="2.9.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="Views\" />
<Folder Include="wwwroot\" />
</ItemGroup>
<ItemGroup>
<Content Update="wwwroot\**\*">
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<Content Update="compilerconfig.json">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\pmlp\js\pmlp.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<None Include="wwwroot\css\devextreme\**" Pack="true" PackagePath="content\wwwroot\css\devextreme" />
<None Include="wwwroot\js\devextreme\**" Pack="true" PackagePath="content\wwwroot\js\devextreme" />
<None Include="wwwroot\pmlp\css\**" Pack="true" PackagePath="content\wwwroot\pmlp\css">
<PackageCopyToOutput>true</PackageCopyToOutput>
</None>
<None Include="wwwroot\pmlp\js\**" Pack="true" PackagePath="content\wwwroot\pmlp\js" >
<PackageCopyToOutput>true</PackageCopyToOutput>
</None>
<None Include="wwwroot\cldr-data\**" Pack="true" PackagePath="content\wwwroot\cldr-data">
<PackageCopyToOutput>true</PackageCopyToOutput>
</None>
<Content Remove="nuget.config" />
<None Include="nuget.config">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<Content Remove="compilerconfig.json" />
<None Include="compilerconfig.json">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<None Include="Views\Shared\_Layout.cshtml" Pack="true" PackagePath="content\Views\Shared" />
<None Include="ACMELayoutWeb.props" Pack="true" PackagePath="build\"></None>
<None Include="ACMELayoutWeb.props" Pack="true" PackagePath="buildMultiTargeting\"></None>
<None Include="ACMELayoutWeb.targets" Pack="true" PackagePath="build\"></None>
<None Include="ACMELayoutWeb.targets" Pack="true" PackagePath="buildMultiTargeting\"></None>
<None Include="build/*" Pack="true" PackagePath="build"></None>
<None Include="build/*" Pack="true" PackagePath="buildMultiTargeting"></None>
<None Include="build\ACMELayoutWeb.props" Pack="true" PackagePath="build/$(TargetFramework)"/>
</ItemGroup>
</Project>
.nuspec
文件:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>ACMELayoutWeb</id>
<version>1.0.0</version>
<authors>ACME</authors>
<owners>ACME</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Descrição do projeto</description>
<releaseNotes>Notas de lançamento</releaseNotes>
<tags>Tags do projeto</tags>
<dependencies>
<dependency id="DevExtreme.AspNet.Core" version="22.2.4" />
<dependency id="DevExtreme.AspNet.Data" version="2.9.0" />
</dependencies>
</metadata>
<files>
<!--
<file src="ACMELayoutWeb.targets" target="build" />
<file src="wwwroot/css/devextreme/*.css" target="content/wwwroot/css/devextreme" />
<file src="wwwroot/js/devextreme*.js" target="content/wwwroot/js/devextreme" />
<file src="wwwroot/acme/js/acme.js" target="content/wwwroot/acme/js" />
<file src="wwwroot/acme/css/acme.min.css" target="content/wwwroot/acme/css" />
<file src="wwwroot/acme/css/bootstrap.min.css" target="content/wwwroot/acme/css" />
<file src="wwwroot/cldr-data/*.*" target="content/wwwroot" />
<file src="Views/Shared/_Layout.cshtml" target="content/Views/Shared" />
-->
<!--<file src="ACMELayoutWeb.props" target="build"/>
<file src="ACMELayoutWeb.targets" target="build"/>
<file src="wwwroot/acme/css/*" target="content/wwwroot/acme/css" exclude="**\*.scss"/>
<file src="wwwroot/acme/js/*" target="content/wwwroot/acme/js" />-->
<file src="Views/Shared/_Layout.cshtml" target="content/Views/Shared" />
<file src="nuget.config" target="content"/>
<file src="compilerconfig.json" target="content"/>
<file src="appsettings.json" target="content"/>
<!--<file src="build\ACMELayoutWeb.props" target="build" />-->
<file src="build\**" target="build" />
<!--<file src="wwwroot\**" target="resource\wwwroot" />-->
<file src="wwwroot\acme\css\**\*.*" target="resource\wwwroot\acme\css" />
<file src="wwwroot\acme\js\**\*.*" target="resource\wwwroot\acme\js" />
<file src="wwwroot\css\**\*.*" target="resource\wwwroot\css\" />
<file src="wwwroot\js\**\*.*" target="resource\wwwroot\js\" />
<file src="wwwroot\cldr-data\**\*.*" target="resource\wwwroot\cldr-data\" />
</files>
</package>
build/.props
文件:
<Project>
<Target Name="CopyFilesToProject" BeforeTargets="Build">
<Message Text="Copy CSS files to project" />
<ItemGroup>
<SourceScripts Include="$(MSBuildThisFileDirectory)..\..\resource\**\*.* "/> <!--file from the nuget package-->
</ItemGroup>
<Copy
SourceFiles="@(SourceScripts)"
DestinationFiles="@(SourceScripts -> '$(MSBuildProjectDirectory)\%(RecursiveDir)%(Filename)%(Extension)')"
/>
</Target>
</Project>
build/.targets
文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildThisFileDirectory)ACMELayoutWeb.props"/>
<!--
<Target Name="CopyJsCssFiles" AfterTargets="Build">
<ItemGroup>
<CssFiles Include="$(MSBuildThisFileDirectory)content\wwwroot\**\*.min.css" />
<JsFiles Include="$(MSBuildThisFileDirectory)content\wwwroot\**\*.js" />
</ItemGroup>
<Copy SourceFiles="@(CssFiles)" DestinationFolder="$(ProjectDir)wwwroot" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(JsFiles)" DestinationFolder="$(ProjectDir)wwwroot" SkipUnchangedFiles="true" />
</Target>
-->
</Project>
root .props
文件:
<Project>
<ItemGroup>
<None Update="ACMELayoutWeb.targets">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
root .targets
文件:
<Project>
<Import Project="$(MSBuildThisFileDirectory)ACMELayoutWeb.props"/>
</Project>
<!--<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Update="wwwroot/acme/css/*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="wwwroot/acme/js/*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Views/Shared/_Layout.cshtml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>-->
<!--
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CopyCssFiles" AfterTargets="Build">
<ItemGroup>
<CssFiles Include="$(MSBuildThisFileDirectory)staticwebassets\**\*.min.css" />
<JsFiles Include="$(MSBuildThisFileDirectory)staticwebassets\**\*.js" />
</ItemGroup>
<Copy SourceFiles="@(CssFiles)" DestinationFolder="$(ProjectDir)wwwroot\" SkipUnchangedFiles="false" />
<Copy SourceFiles="@(JsFiles)" DestinationFolder="$(ProjectDir)wwwroot\" SkipUnchangedFiles="false" />
</Target>
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)staticwebassets\**\*.min.css">
<Link>staticwebassets\**\*.min.css</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="$(MSBuildThisFileDirectory)staticwebassets\**\*.js">
<Link>staticwebassets\**\*.js</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
-->
生成的包:
谢谢!
好吧,几分钟后,我评论问你是否幸运,我能够做到这一点。您所要做的就是获取内容 URL,如下所示,其中
DotnetAdmin
是我的包的 ID:
/_content/DotnetAdmin
然后是其余的 css\js。一切都像下面这样。我仍在试图找出它为什么会这样,在文档中没有找到它,我在一些开源包中找到了它。
<link rel="stylesheet" class="meta-css-light" href="/_content/DotnetAdmin/css/mvc-grid/mvc-grid.css" />