我们希望通过NuGet包安装分发.dll
(NetStandard项目)和一些文件。在Xamarin.Android
项目中安装时:
Directory.Buil.props
)复制到解决方案文件夹config.exe
)复制到项目文件夹Files
)及其内容将复制到项目文件夹PackageReference
的项目无法复制文件(content
不支持).nuspec
文件时;源文件obj
,bin
等也已打包理想情况下,我们希望:
.csproj
文件(不含.nuspec
)content
contentFiles
和.nupkg
.dll
.csproj
.nupkg
版本时,旧文件将被覆盖 (1)这适用于PackageReference
和contentFiles
吗?
(2)您能想到的最佳方法是什么?
感谢。
利奥:
在Android项目中安装软件包时,文件不会出现在项目中。更不用说文件只是被引用而不是被复制(即使我有copyToOutput="true"
):
狮子座(编辑):
我无法使用新的SDK csproj格式。取自您的链接:
免责声明:这仅适用于一小组项目类型。
- 类库项目
- 控制台应用
- ASP.NET核心网络应用
- .NET Core
如果要构建ASP.NET 4(即非ASP.NET Core),WPF,Universal Windows或Xamarin项目,则必须坚持使用旧格式
答案 0 :(得分:0)
(1)这是否适用于PackageReference和contentFiles?
我担心您无法将这些文件添加到Android项目中,但我想在此处提供替代解决方案,将这些文件添加到输出文件夹中。
您可以直接使用PackageReference
和contentFiles
来满足后两个要求config.exe
和Files
。但是对于第一个要求Directory.Buil.props
,我们需要做更多的事情,因为它被复制到解决方案文件夹而不是项目文件夹。
对于后两个要求,config.exe
和Files
,我们可以使用.nuspec
文件和contentFiles
来包含它们,需要设置{ {1}},如:
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>
后,将生成的软件包安装到项目中。
但是,我们无法在“参考”节点下找到这些文件。那是因为该项目仍然使用旧的csproj .nuspec
不使用新的sdk csproj。
Old csproj to new csproj: Visual Studio 2017 upgrade guide
此外,不支持将文件复制到项目的源目录中,对于经典项目而言,这是一种沮丧的做法。 packagereference
部分将为这些文件生成的msbuild项控制到obj \ projectname.csproj.nuget.g.props文件中。并查看您可以找到的contentFiles
文件:
project.assets.json
请参阅:nuspec contentFiles not added to a project
然后我们需要构建这个项目,那些文件将被复制到输出文件夹。
对于第一个要求,为了将 "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"
}
}
添加到解决方案文件夹,我们需要在Directory.Buil.props
文件中创建自定义复制目标,然后添加它。将文件定位到YourPackageName.targets
文件夹,.targets文件如下所示:
\build
.nuspec文件,如:
<?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>
希望这有帮助。