问题标签 [csharpcodeprovider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2067 浏览

c# - 使用 CSharpCodeDomProvider 编译资源文件

我正在尝试构建一个程序,该程序将使用 xml 文件作为资源编译一个 .cs。我有以下编译代码:

但它有编译错误,并说Properties不是来自以下的有效参考Properties.Resources.Story

要编译的cs文件中的代码

更新:这是具体错误:

c:\Users\Nick\AppData\Local\Temp\zk14fqrm.0.cs(38,25):错误 CS0103:当前上下文中不存在名称“属性”

那么这需要改变什么来解决这个问题呢?

0 投票
0 回答
639 浏览

c# - CSharpCodeProvider 抛出“'该进程无法访问该文件,因为它正被另一个进程使用。” 在它生成的同一个文件上

...这并不是因为文件一开始就在那里。我可以证明。

背景是这样的:我们有一个生成 WORD/PDF 文档的桌面应用程序。文档由构建块组成 - 生成特定布局的小类,可以插入不同的数据源,并且动态组合在一起以构建文档。我认为这无关紧要,但为了完整起见,我使用 ASPOSE 来生成文档。

还有另一个要求:我们需要能够更改构建块的 C# 代码并使其在生产中可用,而无需发布。我们选择的解决方案是将各种构建块的代码保存在数据库中,并在应用程序启动时进行预编译:当应用程序启动时,它从数据库中获取代码,并将它们编译成单独的然后将其转储到应用程序的临时文件夹中。为了防止“文件正在被另一个进程使用”错误,我在每个程序集的名称中添加了一个日期时间戳 - 最多毫秒。我通过将日期时间戳存储在静态变量中来跟踪程序集版本。这样,如果用户刷新应用程序,或打开另一个实例,它会安全地生成一组新的 dll' s 具有唯一的名称,这在理论上 - 确保我永远不会得到“另一个进程使用的文件”异常。当应用程序的所有实例都关闭时,临时文件夹将被擦除。(而且我们没有遇到过问题)99.9% 的时间,这个解决方案都能完美运行。它快速高效,并在我们进行更改时使 dll 保持最新。但!

我们的错误处理代码将电子邮件发送到服务器,我收到“文件正在被另一个进程使用”错误!在我的错误处理代码中,我做了以下事情: 当异常被抛出时,我得到一个文件夹中已经存在的所有 Dll 的列表。我还有一个在该迭代期间生成的所有 dll 的列表。然后,所有这些信息都包含在错误消息中。这只会增加混乱:在所有情况下,错误都发生在添加(未更新)到文件夹的最后一个文件上,没有提示可能存在重复的文件名。此外,错误永远不会发生在同一个文件上。有时它是在第一个文件被生成时,其他时候它只发生在大多数文件已经创建之后。错误也很少发生,我一直无法复制它。向用户询问更多信息没有什么价值,因为他们只有在尝试生成报告时才会注意到问题,而且可能是在他们打开应用程序数小时后。此外,此过程发生在用户实际上可以在应用程序中执行任何操作之前。

我收到的错误信息是:

消息:System.Exception:编译 E_Text 时发生错误 ---> System.Exception:8 错误:行:4 - 'System' 的 using 指令先前出现在此命名空间行:5 - 'System. Collections.Generic 之前出现在此命名空间 Line: 188 - 'C####l.Framework.Reporting.ReportWriter.GeneratorCoreExtendedBase.AddContentWithTags(string, bool, C####l.Framework.Reporting.ReportWriter.FontTemplateTypes)' 是过时:'宁可使用 ContentWithTagsParameters 参数,因为这样以后添加更多参数更容易。' 第 153 行 - 变量“ex”已声明但从未使用 行:161 - 变量“ex”已声明但从未使用 行:171 - 变量“ex”已声明但从未使用 行:182 - 变量“ ex' 已声明但从未使用 行:0 - 无法写入输出文件 'c:\Users\a#####e\Documents\T###s\Temp\E_Text_201402141156300351.dll' -- '进程不能访问该文件,因为它正被另一个进程使用。'

添加到临时文件夹的文件:

添加了-C:\Users\a#####e\Documents\T###s\Temp\ExtendedGenerator_201402141156300351.dll 添加了-C:\Users\a#####e\Documents\T###s\Temp \E_Header_1_201402141156300351.dll 添加-C:\Users\a#####e\Documents\T###s\Temp\S_StyleDefault_201402141156300351.dll 添加-C:\Users\a#####e\Documents\T## #s\Temp\E_Footer_1_201402141156300351.dll 添加-C:\Users\a#####e\Documents\T###s\Temp\E_Area_Line_Chart_201402141156300351.dll 添加-C:\Users\a#####e\Documents \T###s\Temp\H_ImageHeader_201402141156300351.dll 添加-C:\Users\a#####e\Documents\T###s\Temp\S_DefaultEditableContent_201402141156300351.dll 添加-C:\Users\a#### #e\Documents\T###s\Temp\S_DefaultCoverLetter_201402141156300351.dll 添加-C:\Users\a#####e\Documents\T###s\Temp\E_Client_Address_And_Salutation_201402141156300351.dll

当前在 TEMP 文件夹中的文件:C:\Users\a#####e\Documents\T###s\Temp\ExtendedGenerator_201402141156300351.dll C:\Users\a#####e\Documents\T###s \Temp\E_Area_Line_Chart_201402141156300351.dll C:\Users\a#####e\Documents\T###s\Temp\E_Client_Address_And_Salutation_201402141156300351.dll C:\Users\a#####e\Documents\T###s \Temp\E_Footer_1_201402141156300351.dll C:\Users\a#####e\Documents\T###s\Temp\E_Header_1_201402141156300351.dll C:\Users\a#####e\Documents\T###s \Temp\E_Text_201402141156300351.dll C:\Users\a#####e\Documents\T###s\Temp\H_ImageHeader_201402141156300351.dll C:\Users\a#####e\Documents\T###s \Temp\S_DefaultCoverLetter_201402141156300351.dll C:\Users\a#####e\Documents\T###s\Temp\S_DefaultEditableContent_201402141156300351.dll C:\Users\a#####e\Documents\T###s \Temp\S_StyleDefault_201402141156300351.dll

在 C####l.Framework.Entity.ReportingCompiler.Compile(String assemblyName, String references, String code, List`1 addedFiles) --- 内部异常堆栈跟踪结束 --- 在 C####l.Framework。 Entity.ReportingCompiler.PrecompileElements(Object o, DbTransaction& transaction) at C####l.Windows.Controls.BackgroundProcess.worker_DoWork(Object sender, DoWorkEventArgs e) - 编译 E_Text 堆栈跟踪时出错:在 C####l。 Framework.Entity.ReportingCompiler.PrecompileElements(Object o, DbTransaction& transaction) 在 C####l.Windows.Controls.BackgroundProcess.worker_DoWork(Object sender, DoWorkEventArgs e) 应用程序:#####

版本: #。#。##。####

操作系统版本:Microsoft Windows NT 6.1.7601 Service Pack 1

说明:无法预编译报告元素

编译器的代码如下:应用程序启动时调用 PrecompileElements 方法,生成报告时调用 LoadAssembly 方法。使用系统;使用 System.Collections.Generic;使用 System.CodeDom.Compiler;使用 System.Text;使用 System.IO;使用 System.Runtime.Serialization.Formatters.Binary;使用 System.Reflection;使用 System.Reflection.Emit;使用 Microsoft.CSharp;使用 C####l.Framework.Configuration;使用 C####l.Framework.Mapping; 使用 System.Data.Common;使用 C####l.Framework.Exceptions;

到目前为止,我的结论是异常是从 CSharpCodeProvider 类中引发的,这几乎限制了我可以做的事情。几乎就好像它创建了文件,然后 - 当它想要写入它时,它会导致错误。但这很奇怪,因为 - 据我了解 - dotNet 也使用这个完全相同的类来编译项目,而我以前从未遇到过这个问题。

如果有人对此有任何见解,我将非常感谢您的意见。

0 投票
1 回答
821 浏览

c# - 在 CodeDom 动态方法中传递和使用列表

我正在尝试使用一个简单的静态方法来返回一个对象来动态评估一个表达式。我已遵循此处示例中概述的建议:http: //www.blackwasp.co.uk/RuntimeCompilation_2.aspx

对于基本表达式,这可以正常工作,但对于涉及 .Contains() 方法的表达式,我会抛出异常。

工作电话:

非工作电话:

代码:

0 投票
1 回答
312 浏览

c# - CSharpCodeProvider 编译异常

我的程序经常编译 c#-code,有时我得到一个 ArgumentException,例如“文件名 'C:\Users--\AppData\Local\Temp\wvpc3m5m.0.cs' 已经在集合中。参数名称:fileName”。

接下来是编译器的设置:

汇编:

我认为 codeProvider 将传递的字符串写入文件,有时他尝试在同一个文件中写入两次。

0 投票
1 回答
1871 浏览

c# - 从另一个项目编译整个项目

我有一个 Windows 窗体应用程序,我用它来生成资源文件。我正在尝试向此应用程序添加此类功能,这将允许我将另一个 Windows 窗体应用程序编译为可执行文件,其中包含这些资源。但是,我坚持编译另一个 Windows 窗体项目部分。

我尝试按照这篇文章进行操作,到目前为止我的代码如下所示:

我不确定,如果我这样做正确(如果我应该编译 Program.cs 文件)。Program.cs 文件如下所示:

当我尝试用上面的代码编译它时,我得到了这个错误:

如果你们能帮助我,我真的很感激,我从来没有从另一个项目中编译过任何东西。

0 投票
1 回答
93 浏览

c# - CSharpCodeProvider 编译顺序

有没有办法以正确的顺序自动编译文件。似乎“CompileAssemblyFromFile”在编译之前并不关心依赖关系。怎么办?

编译顺序

0 投票
2 回答
1064 浏览

c# - ConnectionString 属性尚未初始化。C# Web 应用程序中的错误

这是我的代码:

我已经在web.config.

错误:

ConnectionString 属性尚未初始化。

在这条线上:

0 投票
0 回答
538 浏览

c# - CSharpCodeProvider CompilerParameters 使用 System.Data 错误

我正在使用VS2010,只要我添加该行“DataTable table = null;”,这里发生的错误是代码:

我得到一个 FileNotFoundException,{“无法加载文件或程序集”文件:/// C:\\Users\\Administrator\\AppData\\Local\\Temp\\12azlzyr.dll“或其依赖项之一

. 系统找不到指定的文件。“:”文件:///C:\\Users\\Administrator\\AppData\\Local\\Temp\\12azlzyr.dll”

问题是 classSource.Append("DataTable table= null;\n"); 和
paras.ReferencedAssemblies.Add("System.Data.dll"); 我还不知道怎么解决

经过长时间的搜索,我找到了解决方案,需要添加xml引用paras.ReferencedAssemblies.Add("System.XML.dll");

0 投票
1 回答
455 浏览

c# - CodeDom 对 COM 的引用

我目前正在开发一个使用 CSharpCodeProvider 生成可执行文件的程序。而且我需要添加对 COM-Lib(“Windows 脚本宿主模型”(wshom.ocx))的引用。该文件位于 sysWOW64-Path 中。每次我尝试编译文件时,它都会给我这个错误:

“元数据文件 'c:\Windows\SysWOW64\wshom.ocx' 无法打开 - '试图加载格式不正确的程序。”

问题不是平台问题:无论我设置什么平台,都会出现错误。我试图设置 /platform:x86 参数;我试图将“Builder”的平台更改为 x86,但并没有解决问题。

这是我用来编译的代码:

我希望有人可以在这里帮助我...

0 投票
1 回答
520 浏览

c# - 在运行时编译代码并使用内存中加载的程序集

我需要在运行时编译 C# 代码。我正在使用这样的代码:

但我想使用加载在内存上的库而不是它们的文件地址。可能吗?