我有#.net winforms解决方案,我想创建两个不同的版本:一个支持IE6,另一个支持IE7.我的一个项目中的一些文件对于IE6构建与IE7构建是不同的,所以当我为IE7构建IE6时构建IE6和IE7文件时我想要包含IE6文件.在这种情况下构建解决方案的最佳方法是什么?
由于其他约束,我不想创建包含共享项的单独程序集; 我希望项目编译为单个程序集'foo.dll',无论我正在构建哪个构建.
我以为我可以创建两个单独的项目,编译为'foo.dll',然后创建两个发布配置,并仅在相关配置中包含相关项目.但是我需要在两个项目中包含IE6和IE7相同的文件,我无法看到如何在两个项目中使用文件的单个副本(当我添加现有项目时,它会创建一个副本项目目录).我正在使用SVN进行源代码控制,所以也许可以使用它来在文件夹之间进行"共享",但怀疑这是最好的方式..
注意:由于IE中的API差异,需要不同的构建,其细节与问题无关 - 只要相信我需要两个构建.
有没有办法使用.net 2.0动态执行字符串中包含的代码,方式与javascript中的eval()或tsql中的sp_executeSQL类似?
我在一个变量中有一个字符串值,我想在我的应用程序中的某个点操作 - 所以代码基本上是字符串操作.我不知道需要什么样的操作,所以我希望它们是可配置的.
我真的不关心动态代码编写的语言,无论是最容易实现还是编写简单.
例如,我可能想要替换'.'的实例.带有' - '的字符,或删除所有空格或类似字符.如果我在sql中这样做我会使用动态sql,但我想在.net代码中执行它,如下所示:
// Get the value to be manipulated
string s = ... // wherever s comes from
// Get the manipulation code, eg this might come from a database
// setting that can be changed without recompiling the .net code.
string manipulation = Settings.GetSomeValue("ManipulationSetting");
// This is what I want to know how to do: apply some manipulation to the string.
string result = MagicDynamicEvalClass.Eval(manipulation, s);
// Now I would do stuff …Run Code Online (Sandbox Code Playgroud) 是否有任何工具可以向Windows服务发送(模仿)像'WM_ENDSESSION'这样的Windows消息?
要么
如何使用C#向进程发送Windows消息?
(我只知道C#)
编辑:目的:基本上我必须调试Windows服务来修复仅在系统关闭时发生的错误.
当我的软件通过MSI安装时,它会在HKLM中创建一些注册表项.当人们使用该软件时,他们的个人偏好被保存到HKCU.卸载软件时,HKLM和HKCU注册表项被删除,但我认为只有正在运行卸载的用户的HKCU密钥才会被删除.它是否正确?如果是这样,我如何确保删除在同一台机器上使用我的软件的其他人的HKCU子项?
更新:在我的案例中保存的"个人偏好"不是用户选择的真实设置,而是应用程序在为该用户运行时存储的数据.所以这并不是用户想要保留的真实数据.在卸载时删除它似乎是正确的,因为如果重新安装应用程序它将没有任何用处.所以我想到目前为止最好的建议是Ed:不要使用注册表,尽管这并不是真正解决原始问题.
我想知道如何在SQL Server中设置权限,以允许我的应用程序登录/角色能够使用发送电子邮件msdb.dbo.sp_send_dbmail.
我有一个数据库MyDb,一个MyUser角色成员的用户AppRole.我有一个myProc调用的存储过程msdb.dbo.sp_send_dbmail.如果我myProc在登录时执行,因为sa它一切正常,但如果我在登录时执行,因为MyUser我收到错误:
消息229,级别14,状态5,过程sp_send_dbmail,行1
对象'sp_send_dbmail',数据库'msdb',架构'dbo'上的EXECUTE权限被拒绝.
我的数据库没有TRUSTWORTHY ON,因此我认为我不能使用EXECUTE AS来模仿其他用户,例如使用EXECUTE AS OWNER创建myProc ...(MSDN参考)
因此,我认为我需要让我的用户也是msdb中的用户,但是我可以在角色级别执行此操作,还是需要使我的每个数据库用户也是msdb中的用户?
我正在使用的数据库邮件配置文件设置为public,因此我认为这与配置文件权限无关.
sql-server sql-server-2005 database-permissions database-mail
在管理服务器时,在SQL Azure管理控制台中,您可以选择设置"允许的IP地址"以及"允许的服务".在"允许的服务"中,您可以允许WINDOWS AZURE SERVICES,但这究竟意味着什么?具体来说,这是否意味着在Azure上运行VM的任何其他人都可以连接到我的服务器(假设他们知道用户名和密码)?或者是否存在其他一些限制,例如只能在同一个Subscription中运行的azure服务可以连接,或者只有Linked Linked?
我们有一个中等规模的SSDT项目(约100个表),它被部署到几十个不同的数据库实例中.作为构建过程的一部分,我们生成一个.dacpac文件,然后当我们准备升级数据库时,我们生成一个发布脚本并对数据库运行它.某些数据库实例会在不同时间升级,因此我们必须为这些升级和版本控制提供结构化流程.
大多数生成的迁移脚本正在删除和(重新)创建过程,函数,索引和执行任何结构更改,以及部署后脚本中包含的一些数据脚本.这两个与数据相关的项目我想知道如何在项目中最好地构建:
版本之间需要自定义数据迁移
静态或参考数据
版本之间需要自定义数据迁移
有时我们希望在升级过程中执行一次性数据迁移,我不确定将其纳入我们的SSDT项目的最佳方式.例如,最近我添加了一个新的位列dbo.Charge.HasComments来包含基于另一个表的(冗余)派生数据,并将通过触发器保持同步.令人讨厌但必要的性能改进(仅在仔细考虑和测量后才添加).作为升级的一部分,SSDT生成的发布脚本将包含必要的ALTER TABLE和CREATE TRIGGER语句,但我还想根据另一个表中的数据更新此列:
update dbo.Charge
set HasComments = 1
where exists ( select *
from dbo.ChargeComment
where ChargeComment.ChargeId = Charge.ChargeId )
and HasComments = 0
Run Code Online (Sandbox Code Playgroud)
在我的SSDT项目中包含此数据迁移脚本的最佳方法是什么?
目前,我将每种类型的迁移都放在一个单独的文件中,该文件包含在部署后脚本中,因此我的Post-Deployment脚本最终看起来像这样:
-- data migrations
:r "data migration\Update dbo.Charge.HasComments if never populated.sql"
go
:r "data migration\Update some other new table or column.sql"
go
Run Code Online (Sandbox Code Playgroud)
这是正确的方法,还是有一些方法可以更好地配合SSDT及其版本跟踪,因此当SSDT发布针对已经处于更新版本的数据库运行时,这些脚本甚至都不会运行.我可以拥有自己的表来跟踪已经运行了哪些迁移,但是如果有一种标准的方法可以执行此操作,则不希望自己滚动.
静态或参考数据
一些数据库表包含我们称之为静态或参考数据的内容,例如可能的时区列表,设置类型,货币,各种"类型"表等.目前我们通过为每个表运行一个单独的脚本来填充这些表.部署后脚本.每个静态数据脚本都将所有"正确"的静态数据插入到表变量中,然后根据需要插入/更新/删除静态数据表.根据表格,仅插入或仅插入和删除但不更新现有记录可能是合适的.所以每个脚本看起来像这样:
-- table listing all the correct static data
declare @working_data table (...)
-- add all the static data …Run Code Online (Sandbox Code Playgroud) 我从Azure门户创建了.bacpac文件并将其保存到桌面.然后在Management Studio 2016候选人中右键单击数据库并选择导入数据层应用程序我将目标定位到我的文件然后下一个...当它进入流程时我收到错误:
无法加载文件或程序集"Microsoft.SqlServer.Dac,Version = 13.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"或其依赖项之一.您找不到指定的文件.(Microsoft.SqlServer.Management.Dac.DacWizard)
我正在搜索谷歌,但我找不到任何有效的解决方案.你能帮忙吗?
还查看此图片的配置:
我想用http触发器创建一个C#Azure函数.我希望使用API密钥来保护它,为每个客户提供单独的密钥,并且该功能应该提供客户特定的数据,因此需要确定谁在调用它.
我可以使用Azure功能API密钥来识别客户,例如获取已传递的密钥的名称吗?或者是否无法在azure函数中知道哪个密钥用于验证请求?
如果有一种方法,GetApiKeyName()我可以根据我的数据库中的客户列表检查密钥名称,并根据谁调用该函数返回不同的数据.想象一下,我有一个销售跟踪系统,我的功能是/api/GetMonthlySales.如果客户1使用他们的API密钥调用该功能,他们应该获得他们的月销售额,如果客户2调用它,他们将获得不同的金额.
如果这不可能,则意味着我需要向每个客户提供额外的身份验证数据,以便他们传递给每个函数调用,例如客户ID和密钥.但这违背了使用Azure Functions API密钥的目的,对吧?
类似的情况是,如果我想在他们调用我的功能时向客户收费.如何识别哪个客户正在调用我的功能?
我在IIS 6上的Windows 2003服务器上运行了一个网站,为每个人都在使用域帐户的局域网提供服务.在其他机器上工作正常,没有人必须登录到网站,动态脚本从HTTP请求中获取帐户名称.
仅当从服务器本身浏览(例如通过远程桌面)时,Internet Explorer在导航到此站点时仍会弹出域登录对话框.(通常的URL和http:// localhost /).这在我们最近迁移网站的Windows 2000服务器上没有问题.