Ser*_*gan 7 nuget .net-core dotnet-core-pack
所以我觉得我已经走到了绳索的尽头,但希望有人比我在这里知道的更多。我有一些Typescript文件,尽管这几乎无关紧要,因为我的所有内容文件都存在此问题。
通过在我的项目中使用它,我能够生成一个nuget或更准确的dotnet packnuget 包,其中包含我的内容文件:.csprojparent
<ItemGroup>
<Content Include="Scripts\Utility.ts">
<Pack>true</Pack>
<PackagePath>contentFiles\Scripts\;content\Scripts</PackagePath>
</Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
我可以浏览生成.nupkg的文件,并看到该文件确实已添加到包中的content\Scripts和contentFiles\Scripts位置
问题是,每当我在我的“子”项目中使用这个包时,它Typescript永远不会被复制到child项目的任何文件夹中,尽管我可以看到它在.nuget\packages\parent\...文件夹中被提取出来。
起初我认为这是我在parent项目中的初始设置的问题,它可能是,但是在尝试了本书中的所有内容后,无法将内容文件复制到child项目中。然后我尝试去尝试Init.ps1在tools我的包的文件夹中尝试使用的黑暗路径,虽然无法调试,但它似乎也偶尔运行(我完全卸载并重新安装了包,但它仍然无法运行大部分时间.) 这可能是方式,但我不知道为什么我不能把它输出到Package Manager Console......也许还有希望,Init.ps1但我似乎无法弄清楚。最后,我看到了nuget文件的一些潜力.targets但我似乎也能掌握如何将它用于我的目的!我希望得到一些关于如何完成这项工作的反馈。
显然你需要any\any在路径中(了解更多)以及包含<PackageCopyToOutput>true</PackageCopyToOutput>,如下所示:
<ItemGroup>
<Content Include="Scripts\js\Utility.js">
<Pack>true</Pack>
<PackagePath>contentFiles\any\any\wwwroot\js\;content\any\any\wwwroot\js\</PackagePath>
<PackageCopyToOutput>true</PackageCopyToOutput>
</Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
在将文件包含在包中TypeScript之前,您还需要预编译.js
然而,这仍然不会在那里创建文件,只是对它的一些奇怪的引用。
最后,我们让它使用一个.targets文件,您可以在这里找到一个工作存储库: https: //github.com/NuGet/Home/issues/6743
来自: 宣布支持通用 Windows 平台的 NuGet 3.1
对于使用 Nuget v3.1 中的 project.json 文件的项目,从 Nuget 包导入内容已被弃用。从那时起,project.json 文件已被删除以支持新的 .csproj 格式。如果您使用的是 packages.config 文件,则从 Nuget 包导入内容应该仍然有效。
还提到了一个事实,即还有其他包管理器可用于交付内容。
在我看来,新世界的答案是创建一个包含实用程序.js 的节点模块,并让 npm 将其交付给您的项目。
可能的解决方法:
我已经查看了 .targets 来复制文件并使其正常工作,但它确实在每个构建上运行 - 这对您来说可能是也可能不是问题。我不能用它做我想做的事。

在 [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 -->
Run Code Online (Sandbox Code Playgroud)
并在 .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>
Run Code Online (Sandbox Code Playgroud)
似乎存在一个错误,即当<PackageId>[PackageId]</PackageId>未在 .csproj 中明确设置时,构建目标不起作用。虽然这很可能是我的开发环境的问题。
| 归档时间: |
|
| 查看次数: |
5848 次 |
| 最近记录: |