我一直在尝试查看CodePlex上的一些项目,试图了解其他人如何设计他们的应用程序.我试图在C#2008 Express中打开这些项目时遇到了一些麻烦.当我打开解决方案或csproj文件时,我遇到此错误消息:
无法打开'Foo.csproj',因为此版本的应用程序不支持其项目类型(.csproj).
要打开它,请使用支持此类项目的版本.
当我打开自己创建的项目时,这不会发生.外部项目甚至在2005年以这种格式自动转换,但在尝试打开转换后的文件时会窒息.
这是Express版本的限制,还是我可以做些什么来解决这个问题?
我尝试用谷歌搜索,但我发现的结果不太有帮助.
谢谢!
更新:
@JaredPar要求我打开时遇到困难的具体项目.
众所周知的"打破骆驼的稻草"被称为Continuum,但我也遇到了CodePlex上的其他项目以及Paint.NET源的困难.
我已经尝试卸载并重新安装,但问题仍然存在.
@brianpeiris请求我的安装规范:
Visual Studio
Microsoft Visual Studio 2008
版本9.0.30729.1 SP
Microsoft .NET Framework
版本3.5 SP1
已安装版:C#Express
Microsoft Visual C#2008 91910-152-0000061-60196
用于Microsoft Visual C#2008 Express Edition SP1的
修补程序- ENU(KB945282)KB945282 用于Microsoft Visual C#2008 Express Edition SP1的
修补程序- ENU(KB946040)KB946040 Microsoft Visual C#2008 Express修补程序SP1版本 - ENU(KB946308)KB946308
适用于Microsoft Visual C#2008 Express Edition SP1的修补程序- ENU(KB947540)KB947540 适用于Microsoft Visual C#2008 Express Edition SP1的
修补程序 - ENU(KB947789)KB947789
系统
系统:
Microsoft Windows XP
Professional
版本2002 …
我正试图让自己加速C#,从未开发过它.在之前的一个问题中,我询问了好的书评网站,通过这个网站,我找到了一个非常积极的(以初学者为导向)的"Essential C#"评论,但它是针对之前的版本.
虽然我确信它仍然是一本好书,即使版本之间的质量下降,但它为我提出了一个有趣的问题:
在开始使用新语言时,最好是从最新版本(例如C#3.0/.Net 3.5)开始,还是应该返回一两个版本并尝试学习之后添加到语言中的内容?
从最近立即更新的角度来看,前者似乎更好,但后者似乎更实用,因为它可能更有可能是商店将使用稍微旧版本的语言.
是否可以将命令行参数从bourne脚本中传递到函数中,以便允许getopts处理它们.
我的其余部分很好地打包到函数中,但它开始看起来我必须将参数处理移动到主逻辑中.
以下是它现在的编写方式,但它不起作用:
processArgs()
{
while getopts j:f: arg
do
echo "${arg} -- ${OPTARG}"
case "${arg}" in
j) if [ -z "${filename}" ]; then
job_number=$OPTARG
else
echo "Filename ${filename} already set."
echo "Job number ${OPTARG} will be ignored.
fi;;
f) if [ -z "${job_number}" ]; then
filename=$OPTARG
else
echo "Job number ${job_number} already set."
echo "Filename ${OPTARG} will be ignored."
fi;;
esac
done
}
doStuff1
processArgs
doStuff2
是否有可能以一种可以读取脚本args的方式定义函数?这可以通过其他方式完成吗?我喜欢getopts的功能,但看起来在这种情况下,我将不得不牺牲代码之美来获得它.
在登录您的网站后,特别是在PHP中,是否应该将用户返回到原始页面,是否有"最佳实践"?例如,如果我在未登录时查看StackOverflow问题,如果我登录,您将如何确保我回到此问题?
根据我的研究,似乎有很多建议围绕$ _SERVER ['HTTP_REFERER']变量.基本上,您注意引用并将其存储在会话中,然后在完成后重定向回该页面.
这个问题是HTTP_REFERER充其量是不可靠的.
这是由用户代理设置的.并非所有用户代理都会设置此功能,有些用户可以将HTTP_REFERER修改为功能.简而言之,它无法真正被信任.
- [ http://php.net/manual/en/reserved.variables.server.php]
对引用者重定向到站点其他区域的任何编辑都将通过例行权限检查来处理.如果引用被消除,则可以将用户简单地重定向到站点的主页而不是它们来自的页面.这似乎是不必要的用户敌意,我希望有更好的方法来处理这个问题.
编辑:
*注意:遗憾的是,我暂时使用的是PHP 5.2.我找不到一个体面的廉价主机提供5.3 ...
在PHP中,self指的是定义被调用方法的类.这意味着如果不覆盖子类中的方法,则关键字self将引用父类,即使从子类调用也是如此.
例如,这段代码:
<?php
class ParentClass {
const NAME = "ParentClass";
public function showName() {
echo self::NAME . "<br />\n";
}
}
class ChildClass extends ParentClass {
const NAME = "ChildClass";
public function __construct() {
echo self::NAME . "<br />\n";
}
}
$test = new ChildClass();
$test->showName();
?>
Run Code Online (Sandbox Code Playgroud)
将创建此输出:
ChildClass
ParentClass
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建一个默认方法(例如showName()在上面的示例中),该方法存在于父类中,其中常量定义要使用的默认值.在子代中,我希望能够覆盖这些常量(请注意const上面的子定义中的内容),并在我在子实例上调用该方法时使用这些值.
简而言之,我怎样才能使上述样本的输出为......
ChildClass
ChildClass
Run Code Online (Sandbox Code Playgroud)
...而不必复制孩子中父母的代码?
例如,让我们使用is_callable()函数接受函数名作为参数,并检查是否可以从代码中的该点成功调用它.
如果我想检查对象的方法是否可调用,在引用静态方法时似乎有两个选择:
选项1:
is_callable(array("ObjectName", "MethodName"));
Run Code Online (Sandbox Code Playgroud)
选项2:
is_callable("ObjectName::MethodName");
Run Code Online (Sandbox Code Playgroud)
(实例方法似乎只能使用选项1进行检查,将对象实例作为第一个数组值而不是包含类名的字符串传递.)
这只是一个偏好问题,还是语法糖,还是两者之间存在着明显的差异?
在对模型和数据库更改方法/函数进行单元测试时,单元测试的最佳方法或思维方式是什么?例如,模型中的"发布"函数除了通过/失败之外没有可测试的行为,并且在传递的情况下,它修改数据库.最佳做法或方法?
目前的想法是在测试之前创建当前数据库的镜像,只需更改单元测试文件中的数据库选择.谢谢你的建议.
在某些情况下,我可以使用@角色而不是使用更长的isset()功能吗?如果没有,为什么不呢?
我喜欢使用它,因为在很多情况下我可以保存几个引号,括号和点.
我试图用foreach循环读出这个嵌套数组,但得到一个错误"在foreach中提供的无效参数"
Array (
[regenerated] => 1302668837
[id] => 2
[qty] => 1
[price] => 1200
[name] => support
[optione] =>
[cart_contents] => Array (
[c4ca4238a0b923820dcc509a6f75849b] => Array (
[rowid] => c4ca4238a0b923820dcc509a6f75849b
[id] => 1
[qty] => 1
[price] => 29.95
[name] => Training DVD
[optione] =>
[subtotal] => 29.95
)
[c81e728d9d4c2f636f067f89cc14862c] => Array (
[rowid] => c81e728d9d4c2f636f067f89cc14862c
[id] => 2
[qty] => 1
[price] => 1200
[name] => support
[optione] =>
[subtotal] => 1200
)
[total_items] => 2
[cart_total] => …Run Code Online (Sandbox Code Playgroud) 最近我与老板就"项目失败"进行了一次小小的争论.三年后,我们将代码库迁移到一个新平台的项目(我已经工作了一年的项目已有1.5年,但我的团队领导工作只持续了几个月)才开始实施.他,以及我公司和客户的高级管理人员(我是你听到很多关于那些可怕的顾问之一.我的订婚是"应用外包")宣称该项目是成功的.我不同意,指出我发现的旧陈述表明,与原始计划相比,部署的延迟最好用几个月来衡量,并且可能用数年来衡量.我解释了我所知道的项目失败,以及失败率背后的研究和统计数据.他回答说这是所有的学术界,他所领导的项目都没有失败,
也许这样的咨询与其他项目有所不同,但似乎这只是一个更漂亮的名字的失败,以避免无法按时,按预算或完整功能交付的耻辱.事实上,他解释说我的公司免费提供了数小时的工作,以便在最大限度的预算内完成项目说了很多.
所以我问你这个:
我正在构建一个应用程序(一个可能不止一次得到stackoverflow社区帮助的副项目),它需要打开各种文件类型(即在Word中打开Word文档,而不是在我的应用程序中本机打开) ).
我一直在玩一些代码,用于在注册表中查找文件类型的默认应用程序,并将其传递给Process.Start().这种方法似乎有两个问题:
1)在某些情况下引用应用程序名称,而在其他情况下不引用.
2)Process.Start()要求应用程序路径及其参数分别传递(即Process.Start("notepad.exe",@"C:\ myfile.txt");而不是Process.Start(@"notepad) .exe C:\ myfile.txt");).
这意味着当我从注册表中检索路径时,我必须将其拆分(在确定是否需要拆分引号或空格之后)以确定应用程序路径的哪个部分以及哪些部分是参数,然后将它们分别传递给Process.开始().
替代方案似乎只是传递文件名,如Process.Start(@"C:\ myfile.txt"),但我认为只有在应用程序位于Path环境变量中时才有效.
哪种方式更好?在注册表的情况下,是否有一个常见的解决方案来解析参数?
感谢您的帮助!
更新:
我想简短的回答是'不'
看起来我真的想要过度杀伤路线,并且只要文件名传递,只要注册表中有相关值,它就会起作用.即我在注册表中找到的任何东西,Process.Start()已经知道该怎么做了.
我确实发现当我尝试使用"新"文件类型时,我得到一个Win32Exception,声明"没有应用程序与此操作的指定文件相关联." FredrikMörk在评论中提到他在Vista中不会发生这种情况.处理这个问题的正确方法是什么?
我正在设计一个主要由数据库驱动的个人项目.我正在尝试为如何处理数据库互操作提出一个很好的设计,我想在StackOverflow这里有经验的人的输入.
以下是好的设计,还是有更标准的方式来处理与数据库的通信?
编辑
我主要是寻找关于是否通常将连接细节分解为他们自己的基类,以及逻辑单元/类的子类的反馈.
为此,我修改了下面的代码,添加了一个检索方法,以补充原始问题中的插入方法.我还修改了它以显示它需要/返回(取决于方法)业务对象.
例如,在示例中,我们在整个应用程序中使用Employee类,但是有一个EmployeeDb类(继承自Database),它处理与数据库之间的持久性.
我喜欢这个,因为它将存储实现细节保留在业务对象之外,但不喜欢它,因为它强烈地耦合了Employee和EmployeeDB类.
// Abstract Base Class to handle specifics of the database connection
abstract class Database : IDisposable
{
protected OleDbConnection m_Conn;
public bool Open()
{
// Open a connection to the database
}
public void Dispose()
{
if (m_Conn != null)
{
m_Conn.Dispose();
}
}
}
// Specific classes for each table, with methods for CRUD functions
class EmployeeDB : Database
{
public bool AddTestData(Employee emp)
{
// Construct SQL to add Employee class …Run Code Online (Sandbox Code Playgroud)