我正在尝试运行ASP。NET MVC(模型-视图-控制器)项目从TFS (Team Foundation Server)源代码控制检索。我已经添加了所有程序集引用,我能够成功地构建和编译,没有任何错误或警告。

但是我在浏览器中得到以下错误:

找不到路径的一部分 “C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe”。

以下是错误页面的完整截图。

经过几天的研究,我了解到Roslyn是一个提供高级编译特性的. net编译器平台。但是,我不明白为什么我的构建试图找到\bin\roslyn\csc.exe,因为我没有配置任何与roslyn相关的东西。我也没打算让罗斯林参与我的项目。


当前回答

以我为例,在尝试任何其他解决方案之前,我切换到“发布”配置,重新创建(文件夹被创建),然后切换回“调试”,而文件夹保持不变。

这是从旧解决方案的源代码控制中签出的,显然原始(自动)包恢复和构建项目并没有在bin目录中创建该文件夹。

注意,在撰写本文时,被指责的组件已经达到v.2。

其他回答

问题

请注意,NuGet PM破坏了Rosalyn行为。如果Microsoft.CodeDom.Providers存在更新,则单击“工具”> NuGet包管理器>管理解决方案的NuGet包。DotNetCompilerPlatform, Microsoft.Net。编译器,或者Microsoft.Net.Compilers.netcore,更新它们,解决方案就会崩溃!这是因为ASP Sites模板在项目创建时被设置为使用特定的版本。要查看问题,请单击“解决方案资源管理器”中的“显示所有文件”。

Fix

在项目创建时$(WebProjectOutputDir)\bin不存在,因此当Rosalyn被NuGet添加为依赖项时,它会正确安装它。在更新解决方案包之后,$(WebProjectOutputDir)\bin目录看起来像这样:

$ (WebProjectOutputDir) \ bin \ bin \罗莎

最简单的方法是剪切并粘贴rosalyn到合适的位置,然后删除多余的bin文件夹。现在可以刷新页面,然后加载站点。

所以,罗伯·坎农的回答基本上对我有用,但我不得不调整一些选项。具体来说,我必须删除目标上的条件,并更改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>

我在部署到的服务器上遇到了这个问题,并确定不需要

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

所以,我通过nuget卸载了它,并删除了web配置中的引用。没有问题了。

我最初试图添加目标节点到.proj文件中提到的一些其他答案,但这只是导致另一个错误,msbuild无法复制页面文件。从我读到的内容来看,这似乎是一个漏洞。

默认的VS2015模板的问题是编译器实际上没有复制到{outdir}_PublishedWebsites\tfr\bin\roslyn\目录中,而是复制到{outdir}\roslyn\目录中。这可能与您的本地环境不同,因为AppHarbor使用输出目录构建应用程序,而不是“就地”构建解决方案。

要修复它,在xml块<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

<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>

参考:https://support.appharbor.com/discussions/problems/78633 -斜面-构建- aspnet - mvc项目生成——从vstudio - 2015企业

打开项目文件,用Import project ="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0....删除所有引用

开放网络。配置并删除所有系统。代码dom编译器属性