我的一个项目中有以下代码片段,它从给定的.cs文件输出.dll。
现在,我想输出一个可移植的类库而不是标准库,但不知道如何更改输出类型。
我读取输出类型只是.csproj的一部分,但我没有.csproj这种编译方式.dll。
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.OutputAssembly = "myassemblyname.dll";
cp.GenerateInMemory = false;
cp.IncludeDebugInformation = true;
CompilerResults cr = provider.CompileAssemblyFromFile(cp, new String[] { "MySourceFile.cs", codeFile });
if(cr.Errors.Count > 0) {
Console.WriteLine("Errors building {0}", cr.PathToAssembly);
foreach(CompilerError ce in cr.Errors) {
Console.WriteLine(" {0}", ce.ToString());
Console.WriteLine();
}
}
else
Console.WriteLine("Source {0} built into {1} successfully.", codeFile, cr.PathToAssembly);
}
任何人都知道如何指示CSharpCodeProvider输出可移植类库(PCL)
答案 0 :(得分:1)
根据this回答,您应该pass the right assembly references到CompilerParameters
和set CompilerParameters.GenerateExecutable
属性为false才能生成dll。
要找出正确的引用,您可以通过IDE构建PCL,只需查看“输出”窗口。
答案 1 :(得分:0)
最后,我们切换了这个特定项目的构建方法,它现在只是跟随.csproj。但我们添加正确的CompilerParameters.ReferencedAssemblies的测试似乎有效,所以标记为答案。
20:20-hindsight-remark:生成代码并要求构建编译项目现在看起来不那么令人头痛。毕竟尖尖的clicky界面并不是那么糟糕。