“在VS2015中导入了具有等效标识的多个程序集”,Unity生成了csproj

时间:2018-05-17 20:23:56

标签: unity3d visual-studio-2015

我在Unity 2018.1中启动了一个新的.NET 4.6项目,当我尝试在Visual Studio 2015中构建它时,我得到了“CS1703:已导入具有等效标识的多个程序集”,用于.NET的加载和加载组件,所有这些都是BCL的一部分。项目中唯一的代码是一个空类。 Unity控制台中没有错误。

简易重复步骤(请参阅最后的版本信息):

  1. 创建一个新的Unity项目
  2. 在播放器设置中将脚本运行时级别设置为.NET 4.x
  3. 添加新的C#脚本
  4. 在VS
  5. 中打开项目
  6. 尝试构建它
  7. 如果这是一个普通的项目,我会删除重复的引用,但Unity会不断重新生成.csproj。

    版本信息:

    • Unity:2018.1.0f2
    • Visual Studio 2015:Update 3(14.0.25431.01)
    • Unity的Visual Studio工具:3.7.0.1

1 个答案:

答案 0 :(得分:2)

这似乎是Unity 2018中的一个已知问题,它如何生成Visual Studio项目文件。我刚刚在Unity 2018.1.2f1和Visual Studio 2015 Update 3(14.0.25431.01)中发现了同样的问题。

有人在Unity forum here上发布了同样的问题。微软的Sebastien Lebreton回应了一个解决方法,直到Unity解决了这个问题。将以下脚本添加到名为"编辑器"的文件夹中。在你的项目中。

using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Linq;

using UnityEditor;

#if ENABLE_VSTU

using SyntaxTree.VisualStudio.Unity.Bridge;

[InitializeOnLoad]
public class ProjectFileHook
{
   // necessary for XLinq to save the xml project file in utf8
   class Utf8StringWriter : StringWriter
   {
       public override Encoding Encoding
       {
           get { return Encoding.UTF8; }
       }
   }

   static ProjectFileHook()
   {
       ProjectFilesGenerator.ProjectFileGeneration += (string name, string content) =>
       {
           // parse the document and make some changes
           var document = XDocument.Parse(content);
           var ns = document.Root.Name.Namespace;

           document.Root
               .Descendants()
               .First(x => x.Name.LocalName == "PropertyGroup")
               .Add(new XElement(ns + "ImplicitlyExpandNETStandardFacades", "false"),
                    new XElement(ns + "ImplicitlyExpandDesignTimeFacades", "false"));

           // save the changes using the Utf8StringWriter
           var str = new Utf8StringWriter();
           document.Save(str);

           return str.ToString();
       };
   }
}

#endif