当我直接引用 RCL 项目时,它们工作正常,但是当与 NuGet 打包并安装时,它们不再工作了。
据我所知,当您使用nuget并选择PackageReference nuget管理格式时,将要导入主项目的文件作为链接引入您的主项目(相应的文件不会存在于您的解决方案的物理路径中,但会链接到%userprofile%\.nuget
\xxx中对应的文件地址)。它是 PackageReference nuget 管理格式的特点。
解决方案
为了解决它,我认为您可以在 nuget 项目中添加自定义构建目标(在包中包含 MSBuild 道具和目标)。有了它,您可以将 nuget 包中的文件复制到主项目中。
1.在项目的\build文件夹(必须在项目根目录下创建)添加一个像.targets或.props这样的目标文件(必须与包id相同)。所有这些都基于 nuget 打包机制。
2.将这些代码添加到目标文件中
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<SourceScriptFiles Include="$(MSBuildThisFileDirectory)..\content\xxxx(relative paths in the current project)" />
</ItemGroup>
<Target Name="CopyScriptsToProject" BeforeTargets="Build">
<Copy SourceFiles="@(SourceScriptFiles)" DestinationFolder="$(ProjectDir)\wwwroot\xxxx\"
/>
</Target>
</Project>
使用目标将文件复制@(SourceScriptFiles)
到主项目中。(这DestinationFolder
只是目标地址)。
3.如果你使用nuspec文件打包你的包。您还应该在其中的文件节点下添加这些文件。
<files>
<!-- Include everything in \build -->
<file src="build\**" target="build" />
<!-- Other files -->
<!-- ... -->
</files>
另外,这样的操作是预构建事件,当你安装包时,你应该先构建你的项目,然后你会在目标文件夹下找到文件。
此外,这里有一个很好的 github 示例,我希望它可以提供详细的信息和步骤。希望它可以帮助你。