Jon*_*ate 6 c# xamarin.android nuget xamarin visual-studio-2017
我们想.dll通过NuGet包安装分发(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核心Web应用程序
- .NET核心
如果您正在构建ASP.NET 4(即非ASP.NET Core),WPF,Universal Windows或Xamarin项目,则必须坚持使用旧格式
(1) 这对于 PackageReference 和 contentFiles 可行吗?
恐怕您无法将这些文件添加到 Android 项目中,但我想在这里提供一个替代解决方案,将这些文件添加到输出文件夹中。
对于后两个要求,您可以直接使用PackageReference和,并且。但对于第一个要求,我们需要做更多的事情,因为它被复制到解决方案文件夹而不是项目文件夹。contentFilesconfig.exeFilesDirectory.Buil.props
对于后两个要求config.exe和,Files我们可以使用.nuspecfile 来contentFiles包含它们, need set 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>
Run Code Online (Sandbox Code Playgroud)
打包后.nuspec并将生成的包安装到项目中。
但是,我们在“引用”节点下找不到这些文件。这是因为该项目仍然使用旧的csproj,而不packagereference使用新的sdk csproj。
旧 csproj 到新 csproj:Visual Studio 2017 升级指南
此外,不支持将文件复制到项目的源目录中,这对于经典项目来说是不鼓励的做法。该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"
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅:nuspec contentFiles 未添加到项目中
然后我们需要构建这个项目,这些文件将复制到输出文件夹。
对于第一个要求,为了将 .targets 文件添加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>
Run Code Online (Sandbox Code Playgroud)
.nuspec 文件如下:
<files>
<file src="<>\xxx.targets" target="build" />
</files>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。