小编Hei*_*nzi的帖子

SVN Visual Studio存储库的工作目录结构

我刚刚在我们公司的Visual Studio项目中引入了SVN,并创建了一个看起来像这样的存储库("解决方案"是Visual Studio解决方案,包含1..n个项目):

/solution1/trunk/projectA/...
                /projectB/...
/solution2/trunk/projectC/...
/customerX/solution3/trunk/projectD/...
          /solution4/trunk/projectE/...
                          /projectF/...
Run Code Online (Sandbox Code Playgroud)

现在,我有两个选项来构建本地工作目录:

选项A:让用户使用AnkhSVN单独检出每个解决方案,从而产生如下结构:

/solution1/projectA/...
          /projectB/...
/solution2/projectC/...
/solution3/projectD/...
/solution4/projectE/...
          /projectF/...
Run Code Online (Sandbox Code Playgroud)

或者,如果我告诉用户手动创建customerX子目录:

/solution1/projectA/...
          /projectB/...
/solution2/projectC/...
/customerX/solution3/projectD/...
/customerX/solution4/projectE/...
                    /projectF/...
Run Code Online (Sandbox Code Playgroud)

优点:用户只能查看他真正需要的解决方案.缺点:每个解决方案都需要单独检出/更新.

选项B:告诉用户使用TortoiseSVN签出整个存储库,导致结构与存储库完全相同:

/solution1/trunk/projectA/...
                /projectB/...
/solution2/trunk/projectC/...
/customerX/solution3/trunk/projectD/...
          /solution4/trunk/projectE/...
                          /projectF/...
Run Code Online (Sandbox Code Playgroud)

优点:"svn更新所有内容"非常容易.缺点:用户还拥有所有分支和标签的本地副本.


问题:由于某些项目是在解决方案之间共享的(比方说,例如,projectA是一个也被解决方案3使用的库),我们需要修复一个目录结构,以确保解决方案文件中的相对路径是正确的.你推荐哪个选项?为什么?


编辑:感谢您的所有优秀答案,特别是提及svn:externals和强调良好的存储库设计的重要性.我最终更新了我的存储库结构:

/trunk/solution1/projectA/...
                /projectB/...
      /solution2/projectC/...
      /customerX/solution3/projectD/...
                          -svn:external to projectA
                /solution4/projectE/...
                          /projectF/...
Run Code Online (Sandbox Code Playgroud)

这确保了在解决方案3上工作的开发人员需要检查解决方案3(而不是解决方案1),并且可以将解决方案签出到任何目录,即工作目录不需要固定的结构.

svn visual-studio

9
推荐指数
1
解决办法
2010
查看次数

逃避单个角色最简单的算法是什么?

我正在尝试编写两个函数escape(text, delimiter)unescape(text, delimiter)具有以下属性:

  1. 结果escape不包含delimiter.

  2. unescape是相反的escape,即

    unescape(escape(text, delimiter), delimiter) == text
    
    Run Code Online (Sandbox Code Playgroud)

    对于所有值textdelimiter

可以限制允许的值delimiter.


背景:我想创建一个分隔符分隔的值字符串.为了能够再次从字符串中提取相同的列表,我必须确保单独的字符串不包含分隔符.


我尝试了什么:我想出了一个简单的解决方案(伪代码):

escape(text, delimiter):   return text.Replace("\", "\\").Replace(delimiter, "\d")
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\\", "\")
Run Code Online (Sandbox Code Playgroud)

但发现测试字符串上的属性2失败了"\d<delimiter>".目前,我有以下工作方案

escape(text, delimiter):   return text.Replace("\", "\b").Replace(delimiter, "\d")
unescape(text, delimiter): return text.Replace("\d", delimiter).Replace("\b", "\")
Run Code Online (Sandbox Code Playgroud)

这似乎有用,只要delimiter不是\,bd(这很好,我不想用那些作为分隔符).但是,由于我还没有正式证明其正确性,我担心我错过了其中一个属性被违反的情况.由于这是一个常见的问题,我认为已经存在一个"众所周知的证明正确"的算法,因此我的问题(见标题).

language-agnostic algorithm escaping

9
推荐指数
1
解决办法
905
查看次数

ASP.NET UpdatePanel:使浏览器"返回"按钮返回到页面的*last*版本

我有页面A和页面B.您可以在页面A中执行以下操作:

  • 在页面A上执行操作(例如,选择列表框中的项目),这会导致页面A中的UpdatePanel重新绘制并附加其他信息.
  • 转到第B页.这是通过Button和Response.Redirect.

现在问题如下:

  1. 用户在页面A上执行操作.页面A现在与其初始状态不同.
  2. 用户移动到页面B.
  3. 用户点击浏览器的后退按钮.

会发生什么:网页A 的初始状态 显示.
我想要发生的事情:显示最终状态的页面A (即,在列表框中选择"正确"项目).

我知道ScriptManager.AddHistoryPoint!据我所知,它并没有解决我的问题:

  • AddHistoryPoint 每次在第A页上完成某些操作我都可以打电话.这很糟糕,因为它会在浏览器历史记录中包含大量条目.(每次选择不同的列表框项时都会有一个新条目.)但这正是我想通过使用UpdatePanel来避免的!当然,如果有一种ReplaceLastHistoryPoint方法,那将是完美的,但我没有找到一个......

  • 我试图在AddHistoryPoint之前调用Response.Redirect,只保存页面A 的最后一个状态,但是,唉,这不起作用(没有保存历史记录点).考虑到Response.Redirect工作原理,这并不奇怪.

我错过了一些解决方案吗?我正在使用.NET 3.5SP1,以防万一.

.net c# asp.net updatepanel asp.net-ajax

9
推荐指数
1
解决办法
3267
查看次数

WPF:Visual Studio 2008 Designer中的FixedDocument

当您尝试在XAML中构建一个Visual Studio时,Visual Studio会显示错误,这是一个众所周知的错误FixedDocument.例如,以下代码段

<DocumentViewer>
    <FixedDocument>
        <PageContent>
            <FixedPage Width="21.0cm" Height="29.7cm">
                <TextBlock>Hello World!</TextBlock>
            </FixedPage>
        </PageContent>
    </FixedDocument>
</DocumentViewer>
Run Code Online (Sandbox Code Playgroud)

编译并运行完美,但Visual Studio在错误列表中显示错误(Property 'Pages' does not support values of type 'PageContent'.)这很烦人.

我正在寻找一种解决方案,允许我在Visual Studio中的XAML文件中构建我的文档,而不会收到该错误消息.我找到了一个解决方法,我想在下面分享作为答案,但我很好奇是否有一个更好(更优雅)的解决方案.

.net wpf documentviewer fixeddocument visual-studio-2008

8
推荐指数
1
解决办法
6640
查看次数

try-catch-finally的用例同时包含catch和finally

我理解try-catch如何工作以及try-finally如何工作,但我发现自己在两个完全不同的场景中使用它们(通常):

  • try-finally(或using在C#和VB中)主要用于某些中型代码块,它使用一些需要正确处理的资源.
  • try-catch主要用于
    • 围绕一个单一的陈述,可以以一种非常具体的方式或失败
    • (作为一个包罗万象的)在应用程序的非常高级别,通常直接在一些用户界面操作下面.

根据我的经验,try-catch-finally最合适的情况,即我想要捕获某个特定异常的块与我使用某些可处理资源的块完全相同,这种情况极为罕见.然而,C#,VBJava的语言设计者似乎认为这是一个非常常见的场景; VB的设计师甚至考虑增加捕捉using.

我错过了什么吗?或者我是否因为限制性地使用try-catch而过于迂腐?


编辑:澄清:我的代码通常看起来像这样(为清晰起见,函数展开):

Try
    do something
    Aquire Resource (e.g. get DB connection)
    Try 
        do something
        Try
            do something that can fail
        Catch SomeException
            handle expected error
        do something else... 
    Finally 
        Close Resource (e.g. close DB connection)
    do something
Catch all
    handle unexpected errors
Run Code Online (Sandbox Code Playgroud)

这似乎比将两个捕获中的任何一个放在同一水平上更有意义,最后只是为了避免缩进.

c# java language-agnostic vb.net try-catch-finally

8
推荐指数
4
解决办法
6322
查看次数

免费的轻量级XML文本编辑器,包含在应用程序中

我们的应用程序使用XML配置文件.我认为用我们的应用程序分发一些XML编辑器会很好,这样用户就可以方便地编辑配置文件.功能应该是:

  • 小巧轻便(理想情况下,不需要安装的小型.exe),
  • 免费,许可条款允许与商业应用程序一起分发,
  • 理解XML模式(自动完成,显示验证错误).

有谁知道这样的编辑?

xml xsd text-editor xml-editor

8
推荐指数
1
解决办法
3261
查看次数

Visual Studio 2010 RDLC:支持HTML?

我读过有关Visual Studio 2010 Professional的Report Viewer组件的谣言,可以将数据库中的HTML呈现为报表.不幸的是,我无法在网上找到明确的信息,我宁愿不购买升级只是为了尝试一下.

任何人都可以确认或否认此功能存在,最好是引用可靠的来源(例如VS 2010文档)?

(编辑)澄清:我说的是Visual Studio,而不是SQL Server.我知道SSRS 2008和SSRS 2010支持呈现HTML.我也知道Visual Studio和SQL Server使用相同的库来呈现报告.这就是为什么我认为可以在Visual Studio 2010客户端("本地处理")RDLC报告中呈现HTML 的原因.我只是希望有人确认这一点:我可以使用Visual Studio 2010的ReportViewer组件呈现HTML吗?

html rdlc visual-studio-2010 reporting-services

8
推荐指数
1
解决办法
1万
查看次数

GridLayout中的微调器

将Spinner添加到GridLayout似乎"打破"了布局.我准备了一个最小的工作示例来说明问题:

我想要一个左边是标签的网格,右边是输入控件.右边的控件应占用剩余空间.这是一个简单的例子:

使用EditTexts进行网格化

用旋转器替换其中一个输入控件会导致右列延伸到屏幕边界之外,从而导致布局难看.

Grid with Spinner

为什么会发生这种情况,我该如何避免呢?


这是第一个例子的代码:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="2" >

    <TextView
        android:layout_gravity="left"
        android:text="TextView" />

    <EditText
        android:layout_gravity="fill_horizontal"
        android:hint="EditText" />

    <TextView
        android:layout_gravity="left"
        android:text="TextView" />

    <EditText
        android:layout_gravity="fill_horizontal"
        android:hint="EditText" />

</GridLayout>
Run Code Online (Sandbox Code Playgroud)

这是第二张图片的代码.唯一的区别是第一个EditText已被Spinner取代:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="2" >

    <TextView
        android:layout_gravity="left"
        android:text="TextView" />

    <Spinner
        android:id="@+id/spinner1"
        android:layout_gravity="fill_horizontal" />

    <TextView
        android:layout_gravity="left"
        android:text="TextView" />

    <EditText
        android:layout_gravity="fill_horizontal"
        android:hint="EditText" />

</GridLayout>
Run Code Online (Sandbox Code Playgroud)

layout android android-gridlayout

8
推荐指数
1
解决办法
2722
查看次数

Java:创建一个类型为类型参数的对象

我想编写C#代码的等效Java代码.

我的C#代码如下:

public abstract class A<T> where T : A<T>, new()
{
    public static void Process()
    {
        Process(new T());
    }

    public static void Process(T t)
    {
        // Do Something...
    }
}

public class B : A<B>
{
}

public class C : A<C>
{
}
Run Code Online (Sandbox Code Playgroud)

Java代码与我的代码相似.

public abstract class A<T extends A<T>>
{
    public static <T extends A<T>> void process()
    {
        process(new T()); // Error: Cannot instantiate the type T 
    }

    public static <T extends A<T>> void process(T t)
    { …
Run Code Online (Sandbox Code Playgroud)

c# java generics inheritance

7
推荐指数
1
解决办法
911
查看次数

.NET正则表达式中的(?i)是什么意思?

在我们的代码中,有一个以下形式的正则表达式:

string regex = @"(?i)foo=(BAR?-[A-Z]+(33|34)?)";
Run Code Online (Sandbox Code Playgroud)

(?i)正则表达式开头的" "匹配/做什么?我查看了.NET正则表达式文档,似乎无法弄清楚(?i)意味着什么.谢谢!

.net c# regex

7
推荐指数
1
解决办法
730
查看次数