我正在尝试运行从TFS源代码控制中检索到的Asp.net MVC项目。我添加了所有程序集引用,我能够成功构建和编译,没有任何错误或警告。
但是我在浏览器中收到以下错误:
无法找到路径的一部分 'C:\ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ BIN \罗斯林\ CSC.EXE'。
以下是错误页面的完整屏幕截图。
经过几天的研究,我了解Roslyn是.Net编译器平台,它提供了高级编译功能。但是,我不明白为什么我的构建试图找到\ bin \ roslyn \ csc.exe,因为我没有配置任何与Roslyn相关的东西,也不打算在我的项目中使用Roslyn。
答案 0 :(得分:614)
在我的情况下,解决方案是重新安装/升级Nuget包:
然后我查看了.csproj并确保包裹的路径正确(在我的情况下是.. \ .. \ packages \ *。*)在顶部和{{1}内的标签<ImportProject>
内名称为“EnsureNuGetPackageBuildImports”的底部。这是在MVC 5和.NET Framework 4.5.2上。
简短回答 - 在软件包管理器控制台中运行:
<Target>
答案 1 :(得分:260)
默认VS2015模板的问题是编译器实际上没有复制到tfr \ bin \ roslyn \目录,而是复制到{outdir} \ roslyn \目录
在.csproj文件中添加此代码:
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
<ItemGroup>
<RoslynFiles Include="$(CscToolPath)\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
答案 2 :(得分:145)
您的构建版本正在尝试查找\bin\roslyn\csc.exe
,因为您的项目中已添加了以下软件包。只需查看packages.config
文件,您可以在其中同时使用
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers
什么是Roslyn以及谁在项目中添加了它们(包):如果您使用.net Framework 4.5.2来创建项目 使用VS2015,您可能已经注意到项目模板使用 罗斯林默认情况下。实际上Roslyn是open-source之一 Microsoft的.NET语言编译器。
我们为什么要删除Roslyn: 如果您的项目有Roslyn参考,并且您有兴趣部署 它没有服务器,你会在网站上得到不必要的错误 托管服务提供商仍然没有升级他们的服务器,因此 不支持Roslyn。要解决此问题,您需要删除 项目模板中的Roslyn编译器。
如果您对使用Roslyn不感兴趣, 按照以下步骤将其删除
<强> 1 强> 删除Nuget包,使用Nuget Package Console中的以下命令
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers
<强> 2 强> 执行此操作后,您的web.config文件应自动更新。如果不是,请在web.config文件中查找以下代码,如果找到,请删除这段代码。
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"></compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"></compiler>
</compilers>
</system.codedom>
答案 3 :(得分:63)
清洁和重建对我有用!
答案 4 :(得分:55)
这是一种更多的MSBuild方法。
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
<ItemGroup>
<RoslynFiles Include="$(CscToolPath)\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
但是我注意到roslyn文件也在我的bin目录中(不在文件夹中)。该应用似乎可行。
答案 5 :(得分:23)
为时已晚,但仍然发布以防万一。
按照以下步骤为我修复了错误:
答案 6 :(得分:15)
您需要安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, 特别是为那个错误创建了
答案 7 :(得分:15)
尝试了所有无雪茄的修复后,我通过在Visual Studios中更新此Nuget包来修复了它:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
我的矿山从1.0.0到2.0.0供参考(错误不再显示)
答案 8 :(得分:13)
对于VS 2019,请完全删除以下节点:
<system.codedom>
</system.codedom>
答案 9 :(得分:11)
所以,Rob Cannon's answer基本上对我有用,但我不得不调整一些选项。具体来说,我必须删除目标上的条件,以及更改Include属性,因为在我们的构建服务器上构建项目时$ CscToolPath为空。奇怪的是,$ CscToolPath在本地运行时不是空的。
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" >
<ItemGroup>
<RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
答案 10 :(得分:11)
我按照这些步骤操作,效果很好
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
答案 11 :(得分:9)
这是known issue Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6。降级到1.0.5为我解决了这个问题。
答案 12 :(得分:8)
更新nuget包对我有用 右键单击解决方案&gt;管理NuGet包以获得解决方案 并更新所有包,特别是: 的 Microsoft.Net.Compilers 强> 和 Microsoft.CodeDom.Providers.DotNetCompilerPlatform
答案 13 :(得分:8)
这将重新安装软件包的所有依赖项和文件(例如csc.exe)
答案 14 :(得分:8)
在我的情况下,我只需要转到Visual Studio Solution Explorer(Web应用程序项目)中的bin目录并直接包含roslyn项目。通过右键单击该文件夹并选择“包括在项目中”。并再次检查解决方案以触发构建过程。
默认情况下不包含roslyn文件夹。
答案 15 :(得分:8)
根据Daniel Neel的评论:
版本1.0.3的Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget包适用于我,但版本1.0.6导致此问题中的错误
降级到1.0.3为我解决了这个问题。
答案 16 :(得分:7)
将Microsoft.CodeDom.Providers.DotNetCompilerPlatform从1.0.0升级到1.0.1为我解决了这个问题。
答案 17 :(得分:6)
使用Import Project =&#34; .. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....打开项目文件并删除所有引用。
打开web.config并删除所有system.codedom编译器属性
答案 18 :(得分:6)
在我的情况下,我在Jenkins尝试在Octopus中部署它时出现以下错误:
MSBUILD : OctoPack error OCT-1676060969: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: System.Exception: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. ---> System.UriFormatException: Invalid URI: The format of the URI could not be determined. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at System.Uri..ctor(String uriString) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 211 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: --- End of inner exception stack trace --- [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 224 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.CreateOctoPackPackage.AddFiles(XContainer nuSpec, IEnumerable`1 sourceFiles, String sourceBaseDirectory, String targetDirectory, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 443 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.CreateOctoPackPackage.Execute() in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 190 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
Done Building Project "T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj" (default targets) -- FAILED
<强>原因强>
花了一些时间后,我使用的是使用Microsoft.Net.Compilers
的内部开发组件。内部组件使用Microsoft.Net.Compilers
的原因是为了解决此问题(C#: throw invalid expression compilation)并以这种方式解决(How to use C# 7 with Visual Studio 2015?)。这导致,当我在主程序上安装组件时,Microsoft.Net.Compilers
会自动添加它。
<强>解决方案强>
我的工作是,从我们的内部组件卸载(通过@malikKhalil回答)
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers
在Jenkins中选择C#7编译器而不是C#6并重建,这是为了确保一切正常并正确构建。
最后在我的主程序中,我尝试更新我的内部组件。而且还有一切都要再建造。它没有任何问题或问题。
答案 19 :(得分:5)
如果要添加ASPNETCOMPILER以在MVC中编译Razor视图,例如在this StackOverflow question中,则将PhysicalPath更改为Roslyn nuget包所在的位置(通常通过 $ CscToolPath 变量指向) :
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />
答案 20 :(得分:5)
默认VS2015模板的问题在于编译器实际上并未复制到{outdir}_PublishedWebsites\tfr\bin\roslyn\
目录,而是复制到{outdir}\roslyn\
目录。这可能与您的本地环境不同,因为AppHarbor
使用输出目录构建应用程序,而不是“就地”构建解决方案。
要解决此问题,请在xml块.csproj
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>
文件的末尾
<PropertyGroup>
<PostBuildEvent>
if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
</PostBuildEvent>
</PropertyGroup>
答案 21 :(得分:4)
答案 22 :(得分:4)
在我的情况下,类似于Basim,有一个NuGet包告诉编译器我们需要C#6,我们没有。
我们必须删除随后删除的NuGet包Microsoft.CodeDom.Providers.DotNetCompilerPlatform
:
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
version="1.0.0" targetFramework="net452" />
来自
packages.config文件<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
在system.codedom
节点中,您可以看到它为什么带来了roslyn:compilerOptions="/langversion:6
答案 23 :(得分:4)
我在运行项目时遇到了同样的问题。这是我遵循的步骤。
再次运行项目
这次我看不出同样的错误。这按预期工作
答案 24 :(得分:3)
首先,这里是重现该错误的代码: http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip(最初来自 https://github.com/aspnet/AspNetDocs/tree/master/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client/sample/server/ProductsApp)
而不是使用程序包管理器(andy250 /Smoljár建议)运行
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
您可以删除项目的Web.config
的属性
文件。
(Web.config
与.csproj
文件位于同一目录。)
在文本编辑器中(或在Visual Studio中)打开Web.config
文件。
-在标记configuration | system.codedom | compilers | compiler language="c#;cs;csharp"
中,完全删除type
属性。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- ... -->
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
</configuration>
简而言之,删除以type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft
开头的行。
(大概,相同的修补程序对Visual Basic和Csharp都适用,但我还没有尝试过。)
Visual Studio将负责其余的工作。不再Server Error in '/' Application
。
在我上面的zip文件中提供的示例代码中,您现在将获得HTTP Error 403
当您按 Ctrl + F5 时。
尝试在网络浏览器中将http://localhost:64195
替换为http://localhost:64195/api/products
。
现在,Web API应该显示为:
出于挑衅,我什至尝试删除Visual Studio解决方案的整个package
目录。
我(重新)建造它后,它会自动无声地重新创建。
答案 25 :(得分:3)
当在localhost上完美运行时,我在服务器上安装应用程序时遇到了同样的问题。
这些解决方案都没有,我总是遇到同样的错误:
Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe'
我最终这样做了:
bin/roslyn
文件夹packages\Microsoft.Net.Compilers.1.3.2\tools
这解决了我的问题。
答案 26 :(得分:3)
以下内容为我解决了这个问题:
使用安装程序应用程序更新到最新版本的Visual Studio 2017
清洁并重建解决方案
答案 27 :(得分:3)
除了从解决方案中的所有项目中删除Bin diretory之外,还要删除obj文件夹。
在主解决方案中,删除文件夹.vs
当我尝试将已经完成的项目带入在git上创建的空白解决方案时,为我工作。
答案 28 :(得分:3)
我有没有csproj文件的webproject,这里提到的解决方案对我不起作用。
更改目标.NET框架,重新安装软件包(Update-Package -reinstall
)然后构建项目对我有用。您甚至可以在此操作之后更改目标框架(稍后再重新安装nuget软件包)。
答案 29 :(得分:3)
就我而言,在尝试其他任何解决方案之前,我切换到“发布”配置,重建(创建文件夹),然后切换回“调试”,同时保持文件夹不变。
这是从较旧解决方案的源代码控制中签出的,显然原始(自动)包还原和构建项目未在bin目录中创建该文件夹。
请注意,在撰写本文时,指责的组件已达到v.2.。
答案 30 :(得分:2)
我在要部署到的服务器上遇到此问题,并确定不需要
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
因此,我通过nuget卸载了它,并删除了Web配置中的引用。没有其他问题。
我最初尝试将目标节点添加到.proj文件中,如其他一些答案中所述,但这仅导致另一个错误,其中featureStr.append( featMat[i][0])
#print (featureStr)
featureStr.append(featMat[i][1] )
featureStr.append( featMat[i][2] )
featureStr.append( featMat[i][3] )
featureStr.append( featMat[i][4] )
featureStr.append( featMat[i][5] )
featureStr.append( featMat[i][6] )
无法复制msbuild
我读到的是nuget包中的错误。
答案 31 :(得分:2)
就我而言,只需删除bin文件夹中的所有内容并重新编译即可完成所有工作。
祝有这个问题的人好运。
答案 32 :(得分:2)
如an issue in the Roslyn project on GitHub中所述,一种解决方案(对我有用)是在Visual Studio中简单地卸载和重新加载项目。
直到重新加载项目后,才在构建或重建时创建“ bin \ roslyn”文件夹。
答案 33 :(得分:2)
删除解决方案资源管理器中的Bin文件夹,然后重新构建解决方案。那样可以解决问题
答案 34 :(得分:2)
我尝试了多个最佳答案,直到以下步骤奏效(针对 .NET Framework 4.6.2 的 ASP.NET 项目,在具有疯狂限制性组策略的系统上的 Visual Studio 2019,2021 年 3 月)。
我需要:
以管理员身份
运行VS在包管理器控制台中运行
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -v 2.0.1
清理和重建解决方案
没有以管理员身份运行 VS,组策略阻止了 Update-Package 需要运行的 ps1 脚本。
附注。在此之前,我尝试了许多其他答案(并在失败后运行 git reset --hard )。我不知道他们中是否有任何人为此最终工作做出了贡献。我试过了:
答案 35 :(得分:2)
将PropertyGroup添加到.csproj文件
<PropertyGroup>
<PostBuildEvent>
if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
</PostBuildEvent>
</PropertyGroup>
答案 36 :(得分:1)
... FYI
截至8/31/2017,升级到Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.7正常工作。
答案 37 :(得分:1)
我对Microsoft.CodeDom.Providers.DotNetCompilerPlatform
1.06
以及1.0.7
都有错误,该错误适用于@PrisonerZERO。然而,当微软在2017-10-18发布1.0.8
时,它终于开始为我工作了,我没有必要降级。
https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/
答案 38 :(得分:1)
我通过NuGet更新了一些软件包后遇到了这个问题。重建(而不是正常构建)对我有用。
答案 39 :(得分:1)
更新DotNetCompilerPlatform后我遇到了同样的问题。 通过重新启动Visual Studio解决&gt;清洁项目&gt;建设项目。
答案 40 :(得分:1)
我的解决方案是使用Nuget将以下项目更新为最新版本: - Microsoft.Net.Compilers - Microsoft.CodeDom.Providers.DotNetCompilerPlatform 然后重建项目。由于我的项目是一个网站所以没有* .csproj文件。 当我尝试在浏览器中查看cshtml时,会出现上述错误。
将上述两项更新到最新版本后修复错误。 我在VS2015和windows7 SP1
答案 41 :(得分:1)
就我而言,当我同时运行两个Visual Studio IDE时遇到了这个问题。因此解决方案是清理项目并关闭另一个实例。
答案 42 :(得分:0)
许多答案都涉及Nuget软件包和/或清理并重新加载项目。
如果您有WCF服务引用和无效的终结点,也可能会收到此错误消息。确保端点正确无误,并在通过GUI配置服务引用时在.config中使用正确的端点更新服务配置。
答案 43 :(得分:0)
这可以通过以下简单方式完成 - :
答案 44 :(得分:0)
对于网站项目和Web应用程序项目,答案是不同的。 根本问题是 NuGet软件包在不同计算机上的行为有所不同。可能是供股问题或某些执行策略阻止了它复制到Bin文件夹 如您所知Roslyn是新的编译器。 您应该将它们放在这些项目的Bin文件夹中 进入您的网站NuGet Packages检查此文件夹 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0 \ code \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0 你看到了吗? 您能否在其中看到code \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0 \ tools \ RoslynLatest 现在,作为编译此文件夹的一部分,应将文件夹复制到这样的bin下的网站上。 \ code \ WebSite1 \ Bin \ Roslyn一些不适合您的情况。 尝试以Admin身份运行Visual Studio。 手动复制Roslyn文件夹。 尝试卸载并安装NuGet软件包。 请记住,此程序包会编译您的文件夹,如果没有,则无法编译任何内容,因此也无法添加任何内容。 尝试将此软件包复制到脱机版本 工具->选项-> nuget软件包管理器->软件包源-> Microsoft Visual Studio脱机软件包 C:\ Program Files(x86)\ Microsoft SDKs \ NuGetPackages
答案 45 :(得分:0)
重新启动Windows。
这是尝试重建,删除bin
的内容并重建,重新启动Visual Studio之后对我有用的唯一解决方案。
这是C#/。NET构建工具多么糟糕的另一个例子。
(注意:使用Visual Studio 2019,并且项目文件最初是在Visual Studio 2015中创建的。也许这可以帮助某人调查此问题)
我认为(阅读许多答案之后),总体结论是,此问题的原因和解决方案在很大程度上取决于设置和项目,因此,如果一个答案不起作用,请尝试另一个。在弄乱NuGet软件包或重新安装开发工具之前,请尝试非侵入性/破坏性解决方案,例如重新启动Visual Studio,重新引导,重建等。祝你好运!
答案 46 :(得分:0)
在我的情况下,我们的团队不想保留“ packages”文件夹,因此我们将所有dll放在“ sharedlib”之类的其他目录中。
我使用构建事件来解决此问题。
select * from Event#time(10 seconds) output snapshot every 2 seconds order by value
答案 47 :(得分:0)
重命名解决方案和一些包含的项目后,我遇到了这个错误,并且正在使用删除nuget包。我将新项目与上一个工作项目进行了比较,发现以下几行缺失,需要重新加入:
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
这样做解决了我的问题。
答案 48 :(得分:0)
没有其他答案对我有用。在将文件夹之前/之后与预期的提交文件进行比较之后,我发现GIT忽略了所需的文件夹。如果要在资源库中跟踪编译器,请确保已跟踪BUILD文件夹。如果不是这样,则将永远不会编译该编译器,并且在发布后会抛出此确切错误。我将此行添加到了我的 .gitignore 文件中:
!**/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/build/
现在它已正确部署到其他计算机。
答案 49 :(得分:0)
我在发布管道(生成_PublishedWebsites目录)中遇到了这个问题,并在项目中将其用作目标:
<Target Name="CopyRoslynCompilerFilesToPublishedWebsitesDirectory" AfterTargets="AfterBuild" Condition="Exists('$(OutDir)\_PublishedWebsites\$(TargetName)')">
<Copy SourceFiles="@(RoslyCompilerFiles)" DestinationFolder="$(OutDir)\_PublishedWebsites\$(TargetName)\bin\roslyn" ContinueOnError="true" SkipUnchangedFiles="true" />
</Target>
缺点是输出中会有两个Roslyn文件副本。
答案 50 :(得分:0)
我在运行MSBuild的Jenkins构建服务器上遇到此错误,该服务器将构建文件输出到单独的文件夹位置(_PublishedWebsites)。完全相同 - roslyn文件夹不在bin目录中,并且所有roslyn文件都与bin文件混在一起。
@igor-semin 's answer是唯一对我有用的东西(因为我正在使用C#6语言功能,我不能简单地按照其他答案卸载nuget包),但是因为我也在运行CodeAnalysis,所以我是在我的部署目标服务器上收到另一个错误:
检测到名为“”的Microsoft.CodeAnalysis.ICompilationUnitSyntax类型覆盖现有映射的尝试,当前映射到类型Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax,以键入Microsoft.CodeAnalysis.VisualBasic.Syntax .CompilationUnitSyntax。
原因是当roslyn文件被转储到主bin目录中时,当你运行xcopy在嵌套的roslyn文件夹中重新创建它们时,你现在有2个这些文件的副本被编译,并且有一个他们之间发生冲突。经过多次挫折之后,我决定进行“黑客”修复 - 一个额外的构建后任务,从bin目录中删除这些文件,消除冲突。
我的违规项目的.csproj现在看起来像:
...................更多这里......................
<PropertyGroup>
<PostBuildEvent>
if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
</PostBuildEvent>
</PropertyGroup>
<Target Name="DeleteDuplicateAnalysisFiles" AfterTargets="AfterBuild">
<!-- Jenkins now has copies of the following files in both the bin directory and the 'bin\rosyln' directory. Delete from bin. -->
<ItemGroup>
<FilesToDelete Include="$(WebProjectOutputDir)\bin\Microsoft.CodeAnalysis*.dll" />
</ItemGroup>
<Delete Files="@(FilesToDelete)" />
</Target>
...................更多这里......................
答案 51 :(得分:0)
我不得不将WebAPI和MVC项目文件更改为不构建视图:
<MvcBuildViews>false</MvcBuildViews>
这解决了我使用roslyn的TFS 2015 Build服务器错误。仍然不确定为什么csc.exe被复制到\ bin \ csc.exe,但是发布过程正在寻找\ bin \ Roslyn \ csc.exe ...找不到导致这种差异的转换。
答案 52 :(得分:-1)
请注意,NuGet PM打破了Rosalyn的行为。点击Tools > NuGet Package Manager > Manage NuGet Packages for Solution
如果Microsoft.CodeDom.Providers.DotNetCompilerPlatform
,Microsoft.Net.Compilers
或Microsoft.Net.Compilers.netcore
存在更新,请更新它们,解决方案就会中断!发生这种情况是因为ASP站点模板设置为在项目创建时使用特定版本。要查看问题,请单击“解决方案资源管理器”中的“显示所有文件”。
在项目创建时,$(WebProjectOutputDir)\bin
不存在,因此当NuGet将Rosalyn添加为依赖项时,它会正确安装它。更新解决方案包后,$(WebProjectOutputDir)\bin
目录如下所示:
$(WebProjectOutputDir)\bin\bin\rosalyn
最简单的解决方法是Cut&amp;将rosalyn粘贴到正确的位置,然后删除额外的bin
文件夹。您现在可以刷新页面并加载网站。
答案 53 :(得分:-1)
为了防止构建还将Roslyn文件复制到bin目录,您还必须注释掉放在Web应用程序项目顶部的这一行:
<!-- <Import Project="..\..\..\DAS\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\..\DAS\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" /> -->
答案 54 :(得分:-1)
安装小工具包:Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix/1.0.0