gpt4 book ai didi

.net-core - dotnet core nuget 包在还原时复制内容文件

转载 作者:行者123 更新时间:2023-12-02 22:46:40 25 4
gpt4 key购买 nike

所以我觉得我已经走到了尽头,但希望有人比我知道更多。我有一些Typescript文件,尽管这基本上无关紧要,因为我的所有内容文件都遇到这个问题。

我能够生成 nuget ,或更准确地说dotnet pack ,nuget 包,通过在 .csproj 中使用它,将我的内容文件包含在包中我的parent项目:

<ItemGroup>
<Content Include="Scripts\Utility.ts">
<Pack>true</Pack>
<PackagePath>contentFiles\Scripts\;content\Scripts</PackagePath>
</Content>
</ItemGroup>

我可以浏览生成的.nupkg并看到该文件确实已添加到 content\Scripts 中的包中和contentFiles\Scripts地点

问题是,每当我在“子”项目中使用这个包时,Typescript永远不会被复制到 child 的任何文件夹中项目,尽管我可以看到它在 .nuget\packages\parent\... 中提取文件夹。

起初我以为这是我在parent中的初始设置的问题项目,可能是这样,但是在尝试了书中的所有内容之后,无法将内容文件复制到 child项目。然后我尝试走上尝试使用 Init.ps1 的黑暗之路。在 tools我的包的文件夹中,虽然无法调试,但它似乎也偶尔运行(我完全卸载并重新安装了包,但大多数时候它仍然无法运行。)这可能是这样,但我不知道为什么我无法将其输出到 Package Manager Console ...也许Init.ps1还有希望但我似乎无法弄清楚。最后我看到了 nuget .targets file 的一些潜力。但我似乎也能掌握如何使用它来达到我的目的!我希望得到一些关于如何完成这项工作的反馈。

最佳答案

来自: Announcing NuGet 3.1 with Support for Universal Windows Platform

对于使用 Nuget v3.1 中的 project.json 文件的项目,从 Nuget 包导入内容已被弃用。从那时起,project.json 文件已被删除,取而代之的是新的 .csproj 格式。如果您改用packages.config 文件,则从 Nuget 包导入内容应该仍然可以工作。

还提到了一个事实,即还有其他包管理器可用于交付内容。

在我看来,新世界的答案是创建一个包含 utility.js 的节点模块,并让 npm 将其传递到您的项目。

可能的解决方法:

我查看了 .targets 来复制文件并使其正常工作,但它确实在每个版本上运行 - 这对您来说可能是也可能不是问题。我无法用它做我想做的事。

image

在 [PackageId].targets 中:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Either do this for all scripts in the Scripts/js folder -->
<Target Name="CopyScriptsToProject" BeforeTargets="Build">
<Message Text="Copying scripts to project" />
<ItemGroup>
<SourceScripts Include="$(MSBuildThisFileDirectory)..\..\content\Scripts\js\**\*.*"/>
</ItemGroup>
<Copy SourceFiles="@(SourceScripts)" DestinationFiles="@(SourceScripts -> '$(MSBuildProjectDirectory)\wwwroot\js\%(RecursiveDir)%(Filename)%(Extension)')" Condition="!Exists('$(MSBuildProjectDirectory)\wwwroot\js\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<!-- Or do this for the individual script -->
<Target Name="CopyUtilityScriptToProject" BeforeTargets="Build">
<Copy SourceFiles="$(MSBuildThisFileDirectory)..\..\content\Scripts\js\Utility.js" DestinationFiles="$(MSBuildProjectDirectory)\wwwroot\js\Utility.js" Condition="!Exists('$(MSBuildProjectDirectory)\wwwroot\js\Utility.js')" />
</Target>
</Project>
<!-- Note: condition can be removed from either if you want it to overwrite each build -->

在 .csproj 文件中(将 [PackageId] 替换为您的包的名称):

<Project Sdk="Microsoft.NET.Sdk">
... any Globals for source control stuff ...
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<Version>7.0.0</Version>
<PackageId>[PackageId]</PackageId>
</PropertyGroup>
... any PackageReference stuff ...
<ItemGroup Label="Packaging">
<Content Include="build\netcoreapp2.0\[PackageId].targets" PackagePath="build\netcoreapp2.0\[PackageId].targets" />
<!-- Either -->
<Content Include="Scripts\js\**\*.*" PackagePath="content\Scripts\js;contentFiles\Scripts\js" />
<!-- or -->
<Content Include="Scripts\js\Utility.js" PackagePath="content\Scripts\js;contentFiles\Scripts\js" />
</ItemGroup>
</Project>

似乎存在一个错误,当<PackageId>[PackageId]</PackageId>时未在 .csproj 中明确设置,构建目标不起作用。尽管这很可能是我的开发环境的问题。

关于.net-core - dotnet core nuget 包在还原时复制内容文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49425012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com