所以我的设置是:
Microsoft.代码分析,v. 2.7.0 .... Microsoft.构建,v. 15.6.85
这是一个网络应用程序。
我有以下代码:
var msWorkspace = MSBuildWorkspace.Create();
var solution = msWorkspace.OpenSolutionAsync(filePath).Result;
基本上,我想加载一个本地(服务器本地(解决方案并对其进行一些分析。
但是,加载它似乎会导致问题,例如:
Msbuild 在处理文件"C:\Projects\Project.csproj"时失败,并显示以下消息:
无法从程序集实例化"RazorCodeGen"任务 "C:\Projects\packages\RazorGenerator.MsBuild.2.4.1\build\\..\tools\RazorGenerator.MsBuild.dll"。 请验证任务程序集是否已使用相同的版本构建 的 Microsoft.Build.Framework 程序集作为安装在您的 计算机,并且您的主机应用程序未缺少绑定 重定向到 Microsoft.Build.Framework。无法强制转换类型的对象 "RazorGenerator.MsBuild.RazorCodeGen"键入 'Microsoft.Build.Framework.ITask'.
请注意,错误消息中的路径包含: 建\\。。\工具。
看起来路径中有一个\\。
删除额外的尾部斜杠允许我打开任务(所以它 确实存在并且存在(。
使用 Visual Studio 2017 社区打开和构建解决方案 版本作品。
使用 MSBuild(v. 15.0(生成解决方案也可以。
我已经将绑定重定向从 MSBuild.exe.config 添加到我的应用程序 Web.Config。
更新:
刚刚写了几行代码,尝试使用 Microsoft.Build.Execution.BuildManager 构建解决方案并遇到相同的错误。因此,问题似乎出在MSBuild而不是Roslyn/MSBuildWorkspace上。
Roslyn MSBuild 工作区添加了额外的尾部斜杠?
在检查了项目RazorGenerator.MsBuild中使用的Microsoft.Build.Framework
程序集后,会发现它是针对旧版本的MSBuild 4.0编译的。 当应用程序无法处理多个不同的ITask
定义(来自 Microsoft.Build 的新定义,v. 15.6.85(时,会出现此错误。
若要解决此问题,可以尝试默认引用 v4.0Microsoft.Build.Framework
或添加绑定重定向:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Framework" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
查看此线程以获取更多详细信息。
从目录访问时:\local-pcBasesSystem under developmentERP
- 不起作用。
但是当我放置项目并浏览目录时:D:BasesSystem under DevelopmentERPSystem
- 作品
我的D:
映射到local-pc
。
这意味着RazorCodeGen正在寻找一个位置,并且该项目已被另一个位置打开。