我有一个解决方案,主要使用F#,然后是C#中的.NET Framework项目。我使用 Paket 而不是 NuGet 进行数据包管理。现在,我已将我的第一个 .NET 标准 2.0 库添加到此解决方案中。
当我运行我的构建脚本时,该脚本运行另一个构建脚本,该脚本调用 devenv 进行编译,出现一个错误,指出项目的 obj\project.assets.json 文件丢失。它实际上是在编译时生成的,但前提是编译了其他项目之一。为什么它被报告为失踪有点奇怪。
如果我只运行内部脚本,则没有问题。如果我打开VS并编译,则没有问题。有趣。
我不太确定东西是如何工作的 - 或者不是。但是在谷歌搜索之后,似乎这个文件应该在使用devenv(Visual Studio(编译之前放在那里,而不是由devenv放在那里。
我运行了Paket恢复。这并没有产生缺失的project.assets.json。
我用谷歌搜索了"dotnet restore"的方式。运行此程序时,我在几个较旧的项目上收到此错误。
MSB4020: The value "" of the "Project" attribute in element <Import> is invalid.
所以问题是,我现在该怎么办?
我终于发现,在 Paket 还原之后,我只能在新的 .NET Core 项目上运行此命令,从而避免解决方案中其他项目的错误。
dotnet restore TheProject
然后在编译之前生成丢失的文件,其余的构建脚本运行完成。
PS(编辑(: 这对我来说不是一个完美的解决方案,因为我必须将该行添加到解决方案中每个 .NET Standard 和 .NET Core 项目的生成脚本中。必须像这样维护脚本并不理想。出于这个原因,我将研究必须做些什么来摆脱MSB4020错误。在此之前,这是一个很好的解决方法。
我可以建议您尝试更改项目文件(.fsproj(,如下所示:
- 打开项目文件并找到行:
Import Project="$(FSharpTargetsPath)"
- 地址:
Condition="Exists('$(FSharpTargetsPath)')"
- 因此,您应该得到字符串:
Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')"