我有一个想法,如果我将 python .py 文件添加到我的 C# 项目中,并使用将执行 python 文件的自定义生成器标记该文件,并将输出视为代码生成的结果,即。将其放入 C# 文件中,这将允许我在构建过程中生成大量代码。
有谁知道 Visual Studio 2008 是否存在这样的自定义生成器?
对于这里的高级用户来说,我的问题可能有点不同或基本。
我有一个可由管理员自定义的网络应用程序。这意味着,管理员可以添加新的表架构或编辑表列、添加新的表列等。这些更改将映射到更改后发布的逻辑对象(与 EDMX 非常相似)。在发布时,我们会生成带有必要更改的存储过程。
从 UI 中,我们使用这些逻辑对象来连接 DB(使用 COM 来理解映射并执行适当的存储过程和视图等)。现在我正在考虑使用 EF 来替换我们当前拥有的逻辑对象模型。我可以动态创建 EDMX 文件(csdl、msl、ssdl、cs 文件),但我不确定如何编译它们并将类动态打包到 DLL 中。这意味着,当我单击按钮时,将创建所有 edmx 相关文件,并且必须基于 CS 文件创建 DLL,并且网站必须能够访问代码中的新更改。
你能帮我如何自动动态编译cs文件吗?我不会在客户端拥有其他文件(如 default.aspx 等)的源代码。
谢谢艾伯特
假设我有这段代码,它使用一些输入(例如 URL 路径)来通过反射来确定要运行的方法:
// init
map.put("/users/*", "viewUser");
map.put("/users", "userIndex");
// later
String methodName = map.get(path);
Method m = Handler.class.getMethod(methodName, ...);
m.invoke(handler, ...);
Run Code Online (Sandbox Code Playgroud)
这使用反射,因此可以提高性能。可以这样做:
// init
map.put("/users/*", new Runnable() { public void run() { handler.viewUser(); } });
map.put("/users", new Runnable() { public void run() { handler.userIndex(); } });
// later
Runnable action = map.get(path);
action.run();
Run Code Online (Sandbox Code Playgroud)
但手动创建所有这些Runnable都有其自身的问题。我想知道,我可以在运行时生成它们吗?因此,我将拥有第一个示例中的输入映射,并动态创建第二个示例的映射。当然,生成它只是构建一个字符串的问题,但是编译和加载它呢?
注意:我知道性能提升很小,这是过早优化的完美例子。因此,这是一个学术问题,我对运行时生成和代码编译感兴趣。
我正在寻找一种方法来生成多种语言(Java、C#、JavaScript)的一些模型类,以保持这些语言之间的一致性。是否有一些工具可以帮助我在一个地方定义模型并在所有三种语言的每次更改后生成它?我正在查看JetBrains MPS,但它似乎对于仅生成一种语言很有用,甚至在文档中写道,仅推荐一种语言生成器(如果有)。
到目前为止我发现的唯一方法是每种语言的 XML 文件和 XSL 转换,但我正在寻找更方便的方法。
我主要使用 LLVM C++ API 作为脚本语言的代码生成器,在运行时解析和评估(生成代码、编译和执行代码)。目前,我正在研究分布式/并发系统中的未来用例,并想知道是否以及如何实现这些用例。也许你可以分享你的想法:
我正在做一个 C 项目。我观察到很多代码可以根据某些规则自动生成。IE。如果我只指定C结构,基于此,代码可以自动生成。我知道可以做到,但我以前没做过。如果经验丰富的 C 程序员能够提供某些指导或分享他们关于如何以最少的工程工作完成此类事情的经验,那就太好了。
编辑:具体来说,我是否需要用 C 编写一个自定义解析器来完成所有这些操作,或者是否有一些更简单的方法来处理这个问题?
在 Xtend 中,是否可以中断循环或检查以中断循环?
\n\n\xc2\xabFOR e:d.entitys\xc2\xbb\n \xc2\xabFOR a:e.attributes\xc2\xbb\n \xc2\xabIF a.eClass.name.contentEquals(\'Something\')\xc2\xbb\n \xc2\xabe.name\xc2\xbb "This output should be output one for each Entity e"\n \xc2\xabENDIF\xc2\xbb\n \xc2\xabENDFOR\xc2\xbb\n\xc2\xabENDFOR\xc2\xbb\nRun Code Online (Sandbox Code Playgroud)\n\n我的输出是:
\n\nEntity 1 "This output should be output one for each Entity e"\nEntity 1 "This output should be output one for each Entity e"\nEntity 1 "This output should be output one for each Entity e"\nEntity 2 "This output should be output one for each Entity e"\nEntity 4 "This output should be output one for each …Run Code Online (Sandbox Code Playgroud) 我的问题是否可以扩展架构属性?
我试过的:
collection.json
{
"$schema": "http://schema.angular.io/schematics/collection/2",
"name": "@my/schematics",
"description": "my default collection, containing all schematics that are used normally",
"schematics": {
"library": {
"extends": "@nrwl/angular:library", <--- extends nrwl library
"aliases": [ "lib" ],
"factory": "./library",
"description": "Create my library.",
"schema": "./library/schema.json"
}
}
Run Code Online (Sandbox Code Playgroud)
图书馆/schema.json
{
"$schema": "http://schema.angular.io/schematics/collection/2",
"id": "SchematicsAngularLibrary",
"title": "Create my library",
"type": "object",
"properties": {
"legacy": { <--- adds custom property
"type": "boolean",
"description": "Legacy mode",
"default": false
}
},
"required": []
}
Run Code Online (Sandbox Code Playgroud)
和我的简化原理图库/index.ts
import { chain, externalSchematic, …Run Code Online (Sandbox Code Playgroud) 我的 netstandard 2.0 代码生成器被核心 5.0 控制台应用程序引用。
csproj 看起来像这样
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>9.0</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Func" Version="0.2.2" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.8.0" PrivateAssets="all"/>
</ItemGroup>
<ItemGroup>
<!-- Generator dependencies -->
<PackageReference Include="Microsoft.Data.SqlClient" Version="2.1.1" GeneratePathProperty="true" PrivateAssets="all" />
</ItemGroup>
<PropertyGroup>
<GetTargetPathDependsOn>$(GetTargetPathDependsOn);GetDependencyTargetPaths</GetTargetPathDependsOn>
</PropertyGroup>
<Target Name="GetDependencyTargetPaths">
<ItemGroup>
<!--<TargetPathWithTargetPlatformMoniker Include="$(PKGSystem_Security_Principal_Windows)\runtimes\win\lib\netstandard1.3\System.Security.Principal.Windows.dll" IncludeRuntimeDependency="false" />-->
<TargetPathWithTargetPlatformMoniker Include="$(PKGMicrosoft_Data_SqlClient)\runtimes\win\lib\netstandard2.0\Microsoft.Data.SqlClient.dll" IncludeRuntimeDependency="false" />
</ItemGroup>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
并引用 Microsoft.Data.SqlClient。
试图创建一个新的时,SqlConnection这样的
_dbConnection = new SqlConnection();
_dbConnection.ConnectionString = @"validconnectionstring";
_dbConnection.Open();
Run Code Online (Sandbox Code Playgroud)
在连接打开时,会抛出一个带有消息的异常:
Could not …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我使用了 json_serializable 冻结。在我放置所有数据模型的文件夹中,有很多生成的文件,例如model.g.dart, model.freeezed.dart. 是否有可能将所有生成的文件像这样移动到项目中的单独文件夹中,例如generated?
code-generation ×10
c# ×3
java ×2
angular ×1
angular-cli ×1
break ×1
build-runner ×1
c ×1
c#-9.0 ×1
classloader ×1
compilation ×1
concurrency ×1
dart ×1
dynamic ×1
edmx ×1
flutter ×1
javac ×1
javascript ×1
llvm ×1
loops ×1
move ×1
mps ×1
nrwl ×1
python ×1
roslyn ×1
xtend ×1