Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Roslyn编译器在错误的bin文件夹中查找vbc.exe_.net_Vb.net_Winforms_Roslyn_System Codedom Compiler - Fatal编程技术网

.net Roslyn编译器在错误的bin文件夹中查找vbc.exe

.net Roslyn编译器在错误的bin文件夹中查找vbc.exe,.net,vb.net,winforms,roslyn,system-codedom-compiler,.net,Vb.net,Winforms,Roslyn,System Codedom Compiler,我真的很喜欢VS2015 like?中新的VB14语言功能?。符号和字符串插值。在我们的WinForms.NET4.5应用程序中,我使用codedom编译器动态运行动态报告代码。不幸的是,这并不自动支持新的语言功能 Imports System.CodeDom.Compiler Namespace MAF.DB.BusinessObject.ReportService Public Class VBReportCompiler Implements IReportCompil

我真的很喜欢VS2015 like?中新的VB14语言功能?。符号和字符串插值。在我们的WinForms.NET4.5应用程序中,我使用codedom编译器动态运行动态报告代码。不幸的是,这并不自动支持新的语言功能

Imports System.CodeDom.Compiler

Namespace MAF.DB.BusinessObject.ReportService
   Public Class VBReportCompiler
      Implements IReportCompiler

      Private ReadOnly ApplicationPath As String

      ''' <summary>
      ''' Create a report compiler with a reference to the location of the Wingman dlls. These need
      ''' to be referenced in the compilation, but the location differs between web and windows.
      ''' </summary>
      ''' <param name="ApplicationPath">Path to the binary folder</param>
      Public Sub New(ApplicationPath As String)
         Me.ApplicationPath = ApplicationPath
      End Sub

      Public Function Compile(convertedSourceCode As String, Optional ByRef reporter As IValidationReporter = Nothing,
                              Optional report As IBusinessObject = Nothing) As Object Implements IReportCompiler.Compile
         If reporter Is Nothing Then reporter = IOC.Dependency.Resolve(Of IValidationReporter)()
         Dim result As Object = Nothing
         Try
            If convertedSourceCode Is Nothing Then
               reporter.Add(report, "Report definition missing or blank")
            Else
               Dim params As New CompilerParameters With {
                  .GenerateExecutable = False,  ' Generate a DLL, not and EXE executable.
                  .GenerateInMemory = True,     ' Generate the assembly in memory, don't save to a file
                  .IncludeDebugInformation = True
               }

               params.TempFiles.KeepFiles = False ' don't keep temporary source files.

               ' Add a reference to necessary strong-named assemblies.
               With params.ReferencedAssemblies
                  .Add("Microsoft.VisualBasic.dll")
                  .Add("System.dll")
                  .Add("System.Core.dll")
                  .Add("System.Data.dll") 'Allows use in report of ADO data types
                  .Add("System.Data.DataSetExtensions.dll") 'Allows LINQ on DataTables
                  .Add("System.Drawing.dll") 'Allows access in report of GDI+ basic graphics functionality such as datatable
                  .Add("System.Xml.dll")
                  'Add References to required Wingman assemblies
                  .Add(IO.Path.Combine(ApplicationPath, "MAF.DB.dll")) 'Allows use in report of Data Access & Business Object functions and properties
                  .Add(IO.Path.Combine(ApplicationPath, "MAF.SharedClasses.dll"))
                  .Add(IO.Path.Combine(ApplicationPath, "DB.Foundation.dll"))
                  .Add(IO.Path.Combine(ApplicationPath, "MAF.Tracer.dll")) ' allows use in report of standard error messages
               End With

               ' Create the VB compiler.
               Dim provider = New VBCodeProvider() 'Use the current .Net Framework
               Dim compRes = provider.CompileAssemblyFromSource(params, convertedSourceCode)

               ' Check whether we have any compile errors.
               For Each compileError As CompilerError In compRes.Errors
                  reporter.Add(report, String.Format("Line {0}: {1}", compileError.Line, compileError.ErrorText))
               Next

               If reporter.Valid Then result = compRes.CompiledAssembly.CreateInstance("ReportCompiler")
            End If
         Catch ex As Exception
            reporter.Add(report, "Unknown Error: " & ex.Message)
         End Try

         If Not reporter.Valid Then Return Nothing
         Return result
      End Function
   End Class
为了让它发挥作用,我尝试添加Roslyn codedom nuget包,但这会产生两个问题

第一个问题是,它在错误的位置\bin\debug\bin\roslyn\vbc.exe查找编译器,而构建过程实际上在文件夹\bin\debug\roslyn\中创建编译器。有谁能告诉我如何解决这个问题,因为我的构建服务器部署失败了


制作roslyn文件夹的手动副本并将其放置在codedom希望找到的位置并非真正的解决方案,但这会引发第二个问题,即它希望导入System.Web.HttpRequest和System.Web.HttpResponse。但是我没有编译任何与web相关的winforms代码。那么,为什么它会期望这样呢?

没有任何承诺,但我有一个类似的问题,通过将我正在升级的这些行包括在website.vbproj中的现有项目中来解决。他们应该包括在nuget中

<Import Project="..\Solution\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\Solution\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="..\Solution\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\Solution\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />