(1) 这对 PackageReference 和 contentFiles 可行吗?
恐怕您无法将这些文件添加到 Android 项目中,但我想在这里提供一个替代解决方案,将这些文件添加到输出文件夹。
您可以直接使用PackageReference 和contentFiles 来满足后两个要求,config.exe 和Files。但是对于第一个需求Directory.Buil.props,我们需要做更多的事情,因为它被复制到solution文件夹而不是project文件夹。
对于后两个要求,config.exe和Files,我们可以使用.nuspec文件和contentFiles来包含它们,需要设置copyToOutput="true",例如:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MyTestCore</id>
<version>4.0.0</version>
<authors>TestContentFile</authors>
<owners>TestContentFile</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Package Description</description>
<contentFiles>
<files include="any/any/config.exe" buildAction="content" flatten="true" copyToOutput="true"/>
<files include="any/any/Files/1.txt" buildAction="content" flatten="true" copyToOutput="true"/>
<files include="any/any/Files/2.txt" buildAction="content" flatten="true" copyToOutput="true"/>
</contentFiles>
</metadata>
<files>
<file src="contentFiles/any/any/config.exe" target="contentFiles/any/any/config.exe" />
<file src="contentFiles/any/any/Files/1.txt" target="contentFiles/any/any/Files" />
<file src="contentFiles/any/any/Files/2.txt" target="contentFiles/any/any/Files" />
</files>
</package>
打包这个.nuspec 并将生成的包安装到项目中。
但是,我们无法在参考节点下找到这些文件。那是因为该项目仍然使用带有packagereference 的旧csproj,而不是使用新的sdk csproj。
Old csproj to new csproj: Visual Studio 2017 upgrade guide
此外,不支持将文件复制到项目的源目录中,并且不鼓励经典项目的做法。 contentFiles 部分控制为这些文件生成到 obj\projectname.csproj.nuget.g.props 文件中的 msbuild 项。并检查您可以找到的project.assets.json 文件:
"targets": {
"MonoAndroid,Version=v7.1": {
"MyTestCore/5.0.0": {
"type": "package",
"contentFiles": {
"contentFiles/any/any/Files/1.txt": {
"buildAction": "Content",
"codeLanguage": "any",
"copyToOutput": true,
"outputPath": "1.txt"
},
"contentFiles/any/any/Files/2.txt": {
"buildAction": "Content",
"codeLanguage": "any",
"copyToOutput": true,
"outputPath": "2.txt"
},
"contentFiles/any/any/config.exe": {
"buildAction": "Content",
"codeLanguage": "any",
"copyToOutput": true,
"outputPath": "config.exe"
}
}
见:nuspec contentFiles not added to a project
然后我们需要构建这个项目,这些文件将复制到输出文件夹。
对于第一个要求,为了将Directory.Buil.props添加到解决方案文件夹,我们需要在YourPackageName.targets文件中创建一个自定义复制目标,然后将此.targets文件添加到\build 文件夹,.targets 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<MySourceFiles Include="<FilePath>\Directory.Buil.props"/>
</ItemGroup>
<Target Name="CopyFiles" BeforeTargets="Build">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="<SolutionFolder>"
/>
</Target>
</Project>
.nuspec 文件如:
<files>
<file src="<>\xxx.targets" target="build" />
</files>
希望这会有所帮助。