Visual Studio 2017 csproj在包安装上添加了“怪异”文件

时间:2018-06-13 14:20:01

标签: c# visual-studio-2017 nuget csproj

我的VS2017 csproj(https://natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade/)存在一些问题。当我安装某些nuget软件包时,我会将一些额外的文件添加到我的项目中,并且大部分时间依赖项甚至都无法正常工作。它不会在较旧的csproj上执行此操作。

两个例子:

  • 我有一个“自制”nuget(由VS2017 csproj制作),它应该在安装和卸载时转换目标项目的本地app.config(基本上在安装和删除时添加一行它在uninstlal上)。在较旧的csproj上,它可以完成它需要做的事情。使用VS2017 csproj,它不会进行转换,而是将两个转换文件添加到项目中。

  • 我需要在我的一个项目上安装名为“CefSharp.OffScreen”的软件包。在较旧的一个,它就像一个魅力。在VS2017 csproj上,依赖性甚至不存在(它前面有一个“!”)并且它在那里添加了两个“x64”和“x86”目录,其中包含大量文件(“dll”等)。

VS2017项目有类似问题吗?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  

VS2017项目有类似问题吗?

对于第一个示例,因为xdt在{{​​1}}环境中不支持 。这包括基于sdk的项目以及使用PackageReference而不是PackageReference的经典.net框架项目。您可以关注this GitHub issue了解详情。还有一个sample package,它显示了如何使用构建时逻辑来应用转换,而不是在所有环境中工作。

对于第二个示例,您可以在依赖包packages.config的{​​{1}}文件夹中找到CefSharp.Common.targets文件,在此\build中文件,您可以看到以下代码:

CefSharp.Common

使用此.target文件,nuget会将.target <ItemGroup> <CefSharpCommonBinaries32 Include="$(MSBuildThisFileDirectory)..\CefSharp\x86\*.*" /> <CefSharpCommonBinaries64 Include="$(MSBuildThisFileDirectory)..\CefSharp\x64\*.*" /> <CefSharpCommonBinariesAnyCPU Include="$(MSBuildThisFileDirectory)..\CefSharp\**\*.*" /> </ItemGroup> 文件夹下的文件包含在您的项目中。

在旧的x64项目中,安装nuget软件包后由以下代码导入的x86文件,您可以在项目文件.csproj中查看它:

.target

项目运行时,将导入x86和x64文件夹下的那些文件。

当您使用新的.csproj项目,由文件<Import Project="..\packages\CefSharp.Common.63.0.3\build\CefSharp.Common.targets" Condition="Exists('..\packages\CefSharp.Common.63.0.3\build\CefSharp.Common.targets')" /> 导入的.target文件时,在.csproj中保存project.assets.json时,所有文件都将导入到项目中{1}}。

这就是为什么在安装软件包.target后获得大量dll文件的原因。所以,这不是问题,而是因为它们以不同的方式导入project.assets.json

如果您不想在项目中显示这些dll文件,可以返回CefSharp.Common

希望这有帮助。

相关问题