CodeDom 将生成的 .cs 文件保存在哪里?我们可以将此位置更改为其他文件夹吗
Posted
技术标签:
【中文标题】CodeDom 将生成的 .cs 文件保存在哪里?我们可以将此位置更改为其他文件夹吗【英文标题】:Where does CodeDom save generated .cs files? Can we change this location to a Different Folder 【发布时间】:2016-11-24 17:28:22 【问题描述】:我已成功运行 codedam 示例项目。 输出文件在 bin 调试文件夹中。
正在生成一个 c# 类文件。 我需要在 D:/Temp 文件夹中生成这个 c# 类文件 我没有生成任何可执行文件 输出的是 C# .cs 文件。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.CodeDom.Compiler;
using System.CodeDom;
using Microsoft.CSharp;
using System.Reflection;
namespace codeDamnSample
public class CCodeGenerator
CodeNamespace mynamespace;
CodeTypeDeclaration myclass;
CodeCompileUnit myassembly;
public void CreateNamespace()
mynamespace = new CodeNamespace("mynamespace");
public void CreateImports()
mynamespace.Imports.Add(new CodeNamespaceImport("System"));
public void CreateClass()
myclass = new CodeTypeDeclaration();
myclass.Name = "SampleTest:TestBase";
myclass.IsClass = true;
myclass.Attributes = MemberAttributes.Public;
mynamespace.Types.Add(myclass);
public void CreateMethod()
CodeMemberMethod mymethod = new CodeMemberMethod();
mymethod.Name = testMethod;
CodeTypeReference ctr = new CodeTypeReference();
//Assign the return type to the method.
mymethod.ReturnType = ctr;
//Provide definition to the method (returns the sum of two //numbers)
CodeSnippetExpression snippet1 = new CodeSnippetExpression("AutomationBase obj = new AutomationBase()");
//return the value
CodeSnippetExpression snippet2 = new CodeSnippetExpression("obj.Execute(testCases[0])");
//Convert the snippets into Expression statements.
CodeExpressionStatement stmt1 = new CodeExpressionStatement(snippet1);
CodeExpressionStatement stmt2 = new CodeExpressionStatement(snippet2);
//Add the expression statements to the method.
mymethod.Statements.Add(stmt1);
mymethod.Statements.Add(stmt2);
//Provide the access modifier for the method.
mymethod.Attributes = MemberAttributes.Public;
CodeAttributeDeclaration codeAttrDecl = new CodeAttributeDeclaration("Test");
mymethod.CustomAttributes.Add(codeAttrDecl);
//Finally add the method to the class.
myclass.Members.Add(mymethod);
public void SaveAssembly()
myassembly = new CodeCompileUnit();
myassembly.Namespaces.Add(mynamespace);
CompilerParameters comparam = new CompilerParameters(new string[] "mscorlib.dll" );
comparam.GenerateInMemory = false;
comparam.GenerateExecutable = false;
comparam.MainClass = "mynamespace.CMyclass";
Microsoft.CSharp.CSharpCodeProvider ccp = new Microsoft.CSharp.CSharpCodeProvider();
String sourceFile;
ccp.
if (ccp.FileExtension[0] == '.')
sourceFile = "SampleTest" + ccp.FileExtension;
else
sourceFile = "SampleTest." + ccp.FileExtension;
var tw1 = new IndentedTextWriter(new StreamWriter(sourceFile, false), " ");
ccp.GenerateCodeFromCompileUnit(myassembly, tw1, new CodeGeneratorOptions());
tw1.Close();
ccp.CompileAssemblyFromDom(comparam, myassembly);
public static void generateCod()
CCodeGenerator cg = new CCodeGenerator();
cg.CreateNamespace();
cg.CreateImports();
cg.CreateClass();
cg.CreateMember();
cg.CreateProperty();
cg.CreateMethod();
// cg.CreateEntryPoint();
cg.SaveAssembly();
// Console.ReadLine();
【问题讨论】:
我的代码吐出了 .txt 文件,我必须将它们全部切换为 .cs 有没有办法让它们自动变成 .cs? 【参考方案1】:它应该将文件保存在当前工作目录中,通常是您正在运行的项目中的bin/Debug
文件夹。
【讨论】:
我们可以指定其他文件夹的位置吗 在您的项目设置中。但是你宁愿改变cp.OutputAssembly
中的路径。
你能详细说明吗..我无法理解
您可以在项目设置中设置构建位置,这也会更改输出目录,因为您没有在 cp.OutputAssembly
属性中指定一个。所以真正的解决方案是:在cp.OutputAssembly
属性中指定路径。
cp.OutputAssembly = @"C:\temp\yourassembly.dll";
以上是关于CodeDom 将生成的 .cs 文件保存在哪里?我们可以将此位置更改为其他文件夹吗的主要内容,如果未能解决你的问题,请参考以下文章