一组软件产品的区别仅在于其资源字符串,二进制资源以及Visual Studio安装项目使用的字符串/图形/产品密钥.创建,组织和维护它们的最佳方法是什么?
即所有产品基本上由图形,字符串和其他资源数据定制的相同核心功能组成,以形成每个产品. 想象一下,您正在创建一组产品,如"Excel for Bankers",Excel for Gardeners","Excel for CEOs"等.每个产品都具有相同的功能,但名称,图形,帮助文件,包含的模板等不同.
构建这些环境的环境是:vanilla Windows.Forms/Visual Studio 2008/C#/ .Net.
理想的解决方案很容易维护.例如,如果我引入一个新的字符串/新资源项目,我没有添加资源,应该在编译时失败,而不是运行时.(随后产品的本地化也应该是可行的).
希望我错过了做这一切的明显而简单的方法.它是什么?
============澄清================
"产品"是指由安装程序安装并出售给最终用户的软件包.
目前我有一个解决方案,包括多个项目(包括安装项目),它构建一组程序集并创建一个安装程序.
我需要生产的是多个产品/安装程序,它们都具有类似的功能,它们是从同一组程序集构建的,但其中一个程序集使用的资源集不同.这样做的最佳方法是什么?
------------ 95%的解决方案-----------------
根据Daminen_the_unbeliever的答案,每个配置的资源文件可以实现如下:
<Compile>或<EmbeddedResource>标记,添加一个 Condition="'$(Configuration)' == 'ConfigN'" 属性.这将创建一个每配置资源文件,可以(可能)进一步本地化.为缺少资源的任何配置生成编译错误消息.资源文件可以使用标准方法进行本地化(创建第二个资源文件(MyResources.fr.resx)并像以前一样编辑.csproj).
这是95%解决方案的原因是用于初始化表单的资源(例如表单标题,按钮文本)不能以相同的方式轻松处理 - 最简单的方法似乎是用来自附属程序集的值覆盖这些资源.
我有一个程序需要升级它打开到JET Version4.x的任何Access(Jet)数据库,如果它还不是那个版本.(这样可以使用SQL-92语法功能)
升级(相对)容易.调用JRO.JetEngine对象的CompactDatabase方法(如此处所述)应该可以解决问题,但在此之前,我需要确定是否需要升级.如何确定Jet OLEDB:现有数据库的引擎类型?这可以从开放的OleDBConnection确定吗?
注意:
我使用VS2008设计器从Windows.Form类派生了A类.当我在Visual Studio解决方案资源管理器中双击文件名时,表单设计器将打开.这是期望的行为.
我有一个第二类B,派生自A(手动).这个类是纯代码 - 它添加了一些功能,但表单是相同的 - 但如果我在Visual Studio解决方案资源管理器中双击它的文件名,它将打开表单设计器.这是不希望的行为,特别是因为我需要生成类似的派生类CZ.
有没有办法强制文件始终在代码编辑器中打开?我知道有两个建议的解决方法:
给B类属性:[System.ComponentModel.DesignerCategory("")]
根据各种帖子,这似乎在过去有效,但似乎对我的情况没有任何影响.VS环境仍尝试为该类打开表单设计器.
将源文件重命名为significname.Designer.cs
这......好吧,它不是很好,是吗?
解决方案(1)是否还能运作?如果是这样,我可能做错了什么?
还是有其他解决方案吗?
我正在寻找逻辑上等同于以下问题的指导:
public boolean parallelOR() {
ExecutorService executor = Executors.newFixedThreadPool(2);
Future<Boolean> taskA = executor.submit( new SlowTaskA() );
Future<Boolean> taskB = executor.submit( new SlowTaskB() );
return taskA.get() || taskB.get(); // This is not what I want
// Exception handling omitted for clarity
}
Run Code Online (Sandbox Code Playgroud)
上述结构给出了正确的结果,但是即使从taskB完成后结果已知,总是等待taskA完成.
有没有更好的结构,如果任何一个线程返回true而不等待第二个线程完成,它将允许返回一个值?
(涉及的平台是Android,如果这会影响结果).
java lazy-evaluation short-circuiting java.util.concurrent threadpool
我正在编写一个使用自定义缓存清单文件的Rails4应用程序,该文件需要包含对所有必需的Javascript和CSS文件的引用.由于应用程序的性质,无法使用Rack Offline gem.
该stylesheet_link_tag和javascript_include_tag电话产生正确的文件列表(由资产产生的管道),但在HTML代码嵌入其中.
有没有办法获得控制器中所有已编译的javascript和样式表文件的路径?
例如.
/assets/custom.css?body=1
/assets/incidents.css?body=1
/assets/users.css?body=1
/assets/application.css?body=
/assets/jquery.js?body=1
/assets/bootstrap/affix.js?body=1
...
Run Code Online (Sandbox Code Playgroud) 鉴于此结构:
class Account < ActiveRecord::Base
has_many :users
has_many :teams
validates :name, presence: true
end
class User < ActiveRecord::Base
belongs_to :account
has_and_belongs_to_many :teams
validates :name, presence: true
end
class Team < ActiveRecord::Base
belongs_to :account
has_and_belongs_to_many :users
validates :name, presence: true
end
Run Code Online (Sandbox Code Playgroud)
目标是获取帐户的所有团队 ID/名称的列表/数组,以及指示给定用户是否属于该团队的标志。
在 SQL 中我可以通过以下方式得到这个结果:
SELECT teams.id, teams.name,
teams_users.team_id IS NOT NULL AS member FROM teams
LEFT OUTER JOIN teams_users ON
(teams.id = teams_users.team_id AND team_users.user_id = ?)
WHERE teams.account_id = ?
Run Code Online (Sandbox Code Playgroud)
有Rails 4 / ActiveRecord 方法可以获得相同的结果吗?我所做的每一次尝试都将teams_users.user_id = ? …
我有一个 Visual Studio 2008 解决方案,它构建了一个 C# 类库(项目 X)和 C# Windows 应用程序(项目 Y)。
在 C# 类库 (XTEST) 的单元测试项目中,Intellisense 按预期工作并自动完成类的名称等。
在 windows 应用程序 (YTEST) 的单元测试项目中,Intellisense 已停止工作,仅使用访问器类的名称自动完成,而不是实际类的名称。Intellisense 还将许多类名报告为未知/未定义。这些出现在错误选项卡中,但在编译后消失。
可能的相关事实:
任何有灵感的读者能指出我在 YTEST 项目中修复 Intellisense 的正确方向吗?
回答
原来是项目 obj 目录中的 .cache 文件有问题。删除这些解决了问题。
在Rails 4.2中我可以写:
class Task < ActiveRecord::Base
enum priority: { normal: 50, low: 0, high: 100 }
end
Run Code Online (Sandbox Code Playgroud)
如果我有一个SQL查询(由于不明原因)将优先级作为整数返回,是否有一种简单的方法将该整数转换为其相应的枚举值,例如.:high?
(显然我可以从值中查找键Task.priorities,或者定义我自己的反向索引,但可能这已经在Rails的某处实现了......)
.net ×2
c# ×2
intellisense ×1
java ×1
jet ×1
ms-access ×1
sprockets ×1
threadpool ×1
unit-testing ×1