MSB4020:元素<import>中“项目”属性的值“”无效

时间:2018-07-05 09:47:55

标签: c# f# .net-core paket

我有一个使用.NET Framework项目的解决方案,主要是F#,然后是C#。我使用Paket而不是NuGet进行数据包管理。现在,我已经向该解决方案添加了我的第一个.NET Standard 2.0库。

当我运行构建脚本时,该脚本运行另一个构建脚本,该脚本调用devenv进行编译,但出现错误,指出该项目的obj \ project.assets.json文件丢失。它实际上是在编译时生成的,但前提是要编译其他项目之一。为什么然后将其报告为缺失有点奇怪。

如果我仅运行内部脚本,就没有问题。如果我打开VS并进行编译,那没有问题。好笑。

我不太确定这些东西是如何工作的-还是没有。但是在谷歌搜索之后,似乎应该在使用devenv(Visual Studio)进行编译之前将该文件放置在此处,而不是使用devenv放置在此处。

我运行了Paket恢复。那并没有产生丢失的project.assets.json。

我用谷歌搜索了“恢复dotnet”。运行此命令时,在一些较旧的项目中出现此错误。

MSB4020: The value "" of the "Project" attribute in element <Import> is invalid.

问题是,我现在该怎么办?

2 个答案:

答案 0 :(得分:3)

我终于发现,在还原Paket之后,我只能在新的.NET Core项目上运行此命令,从而避免了解决方案中其他项目的错误。

dotnet restore TheProject

然后缺少的文件在编译之前生成,其余的构建脚本运行完毕。

PS(编辑): 这对我来说不是一个完美的解决方案,因为我必须为解决方案中的每个.NET Standard和.NET Core项目将该行添加到构建脚本中。不得不维护这样的脚本并不理想。因此,我将研究摆脱MSB4020错误必须采取的措施。在此之前,这是一个很好的解决方法。

答案 1 :(得分:0)

我建议您尝试如下更改项目文件(.fsproj):

  1. 打开项目文件并找到以下行:Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
  2. 添加:Import Project="$(FSharpTargetsPath)"
  3. 因此,您应该获得字符串:Condition="Exists('$(FSharpTargetsPath)')"