当前位置: 首页 > 面试题库 >

roslyn编译器未使用msbuild复制到AspnetCompileMerge文件夹

步博厚
2023-03-14
问题内容

我有一个要使用Jenkins部署的.NET MVC项目。

我一直在让Jenkins运行msbuild,然后使用RoboCopy将结果文件复制出来。我想切换为仅使用发布个人资料。发布配置文件在使用Visual
Studio的本地计算机上运行正常,但是在Jenkins主机上,使用msbuild失败。

它给出的错误是

ASPNETCOMPILER:错误ASPRUNTIME:找不到路径“ C:\ Program Files(x86)\ Jenkins \ jobs \
myProject \ workspace \ myProject \ obj \ Debug \ AspnetCompileMerge \
Source \ bin \ roslyn \ csc.exe”的一部分。[C:\ Program Files(x86)\ Jenkins \ jobs
\ myProject \ workspace \ myProject \ calendar.csproj]

我正在使用Microsoft.Net.Compilers
nuget包引入C#编译器,因为项目上的某些协作者仍在Visual Studio2013上,但是我们在项目中使用C#6语言功能。

事实是,在添加发布标志之前,在jenkins上使用MSBuild构建的项目就很好。仅仅是因为添加了/p:DeployOnBuild=true;PublishProfile=MyProfile设置,它才开始失败…但是从Visual
Studio使用发布步骤仍然可以正常工作,并且roslyn编译器甚至被复制到本地计算机上的obj \ Debug \ AspnetCompileMerge
\ Source \ bin \文件夹中。是什么赋予了?

老实说,由于Jenkins服务器上提供了msbuild14,因此它甚至可能 不需要 roslyn
csc.exe文件。有没有一种方法可以使msbuild忽略它?

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <publishUrl>\\myserver\someshare\mysite</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
    <PrecompileBeforePublish>True</PrecompileBeforePublish>
    <EnableUpdateable>True</EnableUpdateable>
    <DebugSymbols>False</DebugSymbols>
    <WDPMergeOption>DonotMerge</WDPMergeOption>
  </PropertyGroup>
</Project>

到目前为止我尝试过的

我试过更新编译器包。

手动复制编译器

我在.csproj文件中添加了一些步骤,以将丢失的编译器文件强制复制到AspnetCompileMerge目录中(我已经将它们复制到bin \roslyn目录中,以解决另一个问题

<Target Name="CopyRoslynFiles" AfterTargets="BeforeBuild">
  <ItemGroup>
    <RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" Exclude="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*.sys" />
  </ItemGroup>
  <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
  <MakeDir Directories="$(WebProjectOutputDir)\obj\$(Configuration)\AspnetCompileMerge\Source\bin\roslyn" />
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\obj\$(Configuration)\AspnetCompileMerge\Source\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

在发布配置文件中关闭可更新性

基于Wesley Rathburn对类似问题的回答,我尝试制作预编译站点,以便无法在发布配置文件中对其进行更新:

<EnableUpdateable>False</EnableUpdateable>

尽管这揭示了一些需要在我的视图中删除的无效代码,但它并没有解决jenkins构建期间的错误。

在本地运行MsBuild

可以 在本地计算机上成功运行msbuild命令。它部署到服务器和所有内容。这是我在Powershell中运行的命令:

&"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /p:Configuration=Debug "/p:DeployOnBuild=true;PublishProfile=MyProfile" myproject\myproject.csproj

删除完全复制编译器的语句

在我看来,也许我不再需要将roslyn编译器复制到bin文件夹中的语句,因为msbuild14现在可以在Jenkins上使用了(我不确定那是我第一次构建该项目的时候)。可悲的是,发生同样的错误。它正在寻找roslyn
\ csc.exe文件,即使这样做似乎没有必要!


问题答案:

因此,我现在使用的解决方法(我并不完全喜欢)只是删除对Compilers和CodeDOMCompilers软件包的依赖。我还必须清除.csproj和web.config文件中的引用。这也涉及从共享程序集中删除那些程序包。

这将打破人们仍然使用Visual Studio 2013,这是我不喜欢的项目,但它建立我的詹金斯主机现在,这是我 做的
一样。如果有人有更好的解决方案,我将很高兴听到。



 类似资料:
  • 我有一个 .NET MVC 项目,我正在尝试使用 Jenkins 进行部署。 我一直让 Jenkins 运行 msbuild,然后使用 RoboCopy 复制生成的文件。我想切换到仅使用发布配置文件。发布配置文件在使用Visual Studio的本地计算机上运行良好,但在Jenkins主机上使用msbuild失败。 它给出的错误是 ASPNETCOMPILER:错误ASPRUNTIME:找不到路径

  • 我最近刚刚深入研究了Roslyn编译器的东西,我想知道一些可能性。我正在尝试使用分支从Roslyn存储库构建Roslyn编译器,并替换文件夹中所需的DLL。但是当我替换DLL并构建控制台应用程序项目时,我收到了以下错误消息 严重性代码描述项目文件行抑制状态 错误无法运行指定的任务可执行文件“csc.exe”。无法加载文件或程序集Microsoft.CodeAnalysis.CSharp、Versi

  • 在Visual Studio 2017中,当点击<kbd>Ctrl</kbd><kbd<F5</kbd>运行我的ASP时。NET Framework Web API服务器,我得到: 在包管理器控制台中运行并不是永久的修复,因为当包文件丢失时,服务器错误会再次出现。我如何一劳永逸地摆脱此错误,以便在我重新打开、构建和运行我的Visual Studio解决方案时自动(默默地)重新安装所需的包? 重现错

  • 概述 编译选项可以在使用MSBuild的项目里通过MSBuild属性指定。 例子 <PropertyGroup Condition="'$(Configuration)' == 'Debug'"> <TypeScriptRemoveComments>false</TypeScriptRemoveComments> <TypeScriptSourceMap>true</TypeS

  • 在Visual Studio 2017中,当单击Ctrl+F5运行我的ASP.NET Framework Web API服务器时,我会得到: 找不到文件...bin\Roslyn\csc.exe: 在包管理器控制台中运行并不是永久性的修复,因为当包文件丢失时,服务器错误会再次出现。如何才能一劳永逸地消除此错误,以便在重新打开、生成和运行Visual Studio解决方案时立即自动(以静默方式)重新

  • 我的指南针版本是1.0.1(北极星)我的sass版本是3.4.5 当我做一个普通的指南针手表时,它工作得很好。我喜欢使用codekit,我想让它编译我的scss文件,但它不是,它让我发疯。 如果有人对如何解决这个问题有任何想法,请告诉我。提前谢谢。 尝试编译时出现以下错误:Compass无法编译项目中的一个或多个文件: /System/Library/Frameworks/Ruby.framewo