我遇到了用于生成代码的T4模板的问题。
我想知道是否有人可以帮助我解决我遇到的问题。 我想将连接字符串存储在默认位置,例如网站的根目录(Web.Config或单独的.config文件),以便与SubSonic 3.0一起使用。
如果t4模板在具有配置文件的项目中“运行”,这很好。
我想要做的是将它们从初始项目分离到单独的类/项目文件中,然后从那里运行模板。
这一切都很好,只要我在这些项目中使用连接字符串放置App.Config文件,但这不是我想要的,因为这将硬编码那些类文件中的连接字符串。 (注意其他类文件项目完全在一个单独的位置)
我可以描述设置(Web应用程序)的最佳方式如下:
注1: 该目录中的T4模板需要从Website(Project)根文件夹中的任何centeral文件中读取。由于数据库服务器可以改变,因此需要发生这种情况。
数据库类(项目)与网站(项目)位于不同的位置。
这已经在dashCommerce中完成,但是使用SubSonic 2.0(很可能是命令行编译器做到了,我不太确定)
只是因为有人想知道为什么我这样做。我正在编译一组基础DLL,以便在许多项目中使用。
DB类对于每个项目都是唯一的,并且将使用该DLL中的T4 teplates基于该项目的数据库进行编译。其他DLL将引用DB类DLL,这些将在项目中很常见。
基本上,DB类实际上是我编写的任何其他DLL的数据库的网关,因此DB类需要引用根项目中的连接字符串。
(我意识到我可以创建和编译要使用的数据库DLL但是在开发/测试中项目将挂在其他DLLS上,因为他们也需要引用连接字符串如果我包含对SubSonic的引用我需要从这些DLL访问表对象等除非我在DB类中创建所有桥接代码,这对于这个练习来说只是疯狂而毫无意义)
编辑:
我承认很难解释。我将基于一个更简单的例子。我有两个地点: A.- D:\ Web Application \ Core.DLL AND B.- D:\ Web Application \ Website 我在“Web应用程序”文件夹中创建了一个新的C#.net“Web应用程序”解决方案,并将上面的两个项目添加到其中。 (请注意,它是一个在不同目录中包含两个单独项目的解决方案,可以是任何位置)我需要将连接字符串数据存储在“Website”项目中,并让Core.DLL项目从那里引用它。
Core.Dll将存储生成的ttfiles和相应代码,以便与SubSonic 3.0一起使用。 tt文件将从Core.Dll项目中的Visual Studio中“运行”。这两个问题是:
答案 0 :(得分:0)
好的,我不确定我是100%对你所要求的,但我会尽我所能
不,但他们真的不需要。 D:\ Web Application \ Core.DLL的App.config可以包含连接字符串。如果您担心在web.config和app.config中都重复连接字符串,那么您可以添加一个自定义构建事件,将连接字符串从一个复制到另一个。
在运行时,web.config将不会引用您的网站引用app.config。
答案 1 :(得分:0)
感谢你回到我身边亚当。我刚刚发布时想出来,并认为我会让人们知道我的结果。
直到我在网上搜索关于T4模板的内容,我的脑海才开始行动起来。 我误解了T4模板的工作原理。我认为tt文件必须保留生成的代码文件。
我所做的是创建第二个项目,只是为了运行与主项目分开的T4模板。我输入了我目前使用的连接字符串,同样只用于开发,而不是生产,所以我可以轻松修改它。这非常有效,并允许我将生成的代码文件复制到DB DLL类项目中以供使用。
我不知道的是,就像你上面说的那样,当项目完全运行时,它将Web.config文件提供给与网站相关的任何DLL等。 所以这也解决了我的连接字符串的问题,并且在生产中很容易修改它。
愚蠢,但这只是其中之一,如果你不知道也没有人告诉你,你认为不能这样做。
我现在可以使用SubSonic访问项目中任何位置的数据库对象(包括引用数据库DLL类的任何DLL)。
我不得不说,SubSonic将会让我的生活更轻松。获取数据的单行代码,现在这是很好的思考:)