Entity Framework사용 시 편리한 테스트 방법


참조 URL
  1. http://msdn.microsoft.com/en-US/data/dn314429
  2. https://github.com/rowanmiller/EntityFramework.Testing/wiki
  3. 페이스 북의 "Gyuwon Yi"님이 소개를 해줘서 알게된 프레임워크

 


 Entity Framework를 통해 DB 컨트롤을 하는 객체를 만들었을 때 Mock을 통해 쉽게 테스트를 할 수 있는 프레임웍을 소개 하고자 한다. rowanmiller가 GitHub에 올려둔 "EntityFramework.Testing"를 살펴 보면 간단한 사용 방법을 보여주고 있다. 아래 코드는 테스트 부분만 따로 떼어내서 간단한 부연 설명을 주석으로 추가 하였다.


var data = new List<Blog>
{
    new Blog{ Name = "BBB" },
    new Blog{ Name = "CCC" },
    new Blog{ Name = "AAA" }
};

[코드1] 데이터 원본


'코드1'에서와 같은 데이터에서 Mock을 통해 DBContext를 만들기 위해서는 '코드2' 에서와 같이 해줘야 했으나 "EntityFramework.Testing"를 사용하면 "코드3"와 같은 코드로 대체할 수 있다.


var mockSet = new Mock<DbSet<Blog>>(); mockSet.As<IQueryable<Blog>>().Setup(m =>m.Provider).Returns(data.Provider); mockSet.As<IQueryable<Blog>>().Setup(m =>m.Expression).Returns(data.Expression); mockSet.As<IQueryable<Blog>>().Setup(m =>m.ElementType).Returns(data.ElementType); mockSet.As<IQueryable<Blog>>().Setup(m =>m.GetEnumerator()).Returns(data.GetEnumerator()); var mockContext = new Mock<BloggingContext>(); mockContext.Setup(c => c.Blogs).Returns(mockSet.Object); 

[코드2] 기존 초기화 코드


var set = new MockDbSet<Blog>()
    .SetupSeedData(data)
    .SetupLinq();

[코드3] 변경된 초기화 코드




 테스트 및 직접 확인할 수 있는 코드를 '코드4~6'를 통해 직접 확인해 보기를 바란다.




public class BloggingContext : DbContext
{
    public virtual DbSet<Blog> Blogs { getset; }
    public virtual DbSet<Post> Posts { getset; }
}
 
public class Blog
{
    public int BlogId { getset; }
    public string Name { getset; }
    public string Url { getset; }
 
    public virtual List<Post> Posts { getset; }
}
 
public class Post
{
    public int PostId { getset; }
    public string Title { getset; }
    public string Content { getset; }
 
    public int BlogId { getset; }
    public virtual Blog Blog { getset; }
}

[코드4] 기본 Entity 클래스 선언



public class BlogsController : Controller
{
    private readonly BloggingContext db;
 
    public BlogsController(BloggingContext context)
    {
        db = context;
    }
 
    public async Task<ViewResult> Index()
    {
        var query = db.Blogs.OrderBy(b => b.Name);
 
        return View(await query.ToListAsync());
    }
}

[코드5] 테스트할 클래스 생성


// https://github.com/rowanmiller/EntityFramework.Testing/wiki [TestClass] public class EntityFrameworkTest {     [TestMethod]     public async Task Index_returns_blogs_ordered_by_name()     {         // 테스트 데이터 생성 - Arrange         var data = new List<Blog>         {             new Blog{ Name = "BBB" },             new Blog{ Name = "CCC" },             new Blog{ Name = "AAA" }         };         // Mock를 통해 Context 세팅 -- Act         // Mock객체가 반환할 객체 단위를 List<Blog>에서 가져오도록 세팅한 것이다.         var mockSet = new MockDbSet<Blog>()             .SetupSeedData(data)            .SetupLinq();

// 기존 초기화 세팅 //var mockSet = new Mock<DbSet<Blog>>(); //mockSet.As<IQueryable<Blog>>().Setup(m => m.Provider).Returns(data.Provider); //mockSet.As<IQueryable<Blog>>().Setup(m => m.Expression).Returns(data.Expression); //mockSet.As<IQueryable<Blog>>().Setup(m => m.ElementType).Returns(data.ElementType); //mockSet.As<IQueryable<Blog>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());

        var context = new Mock<BloggingContext>();         context.Setup(c => c.Blogs).Returns(mockSet.Object);         // BlogsController 의  Index를 실행         var controller = new BlogsController(context.Object);         var result = await controller.Index();         // 결과값 확인 - Assert         var blogs = (List<Blog>)result.Model;         Assert.AreEqual(3, blogs.Count());         Assert.AreEqual("AAA", blogs[0].Name);         Assert.AreEqual("BBB", blogs[1].Name);         Assert.AreEqual("CCC", blogs[2].Name);     } }

[코드6] 테스트 코드








A C# 6.0 Language Preview


참조 URL
  1. http://msdn.microsoft.com/en-us/magazine/dn683793.aspx

 


example





MS 요즘 빠른 행보와 C# 6.0 버전이 출시를 할거 같습니다.
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

 

A C# 6.0 Language Preview

http://msdn.microsoft.com/en-us/magazine/dn683793.aspx

 

중에 프로퍼티의 선언과 초기화가 좀더 단순화 있도록 개선이 되네요

 

지금까지는 private public 변수를 각각 선언해서 초기화를 시켰는데 아래와 같이 초기화를 한줄로 있을 합니다.

 

 

 

Auto-Properties with Initializers

Initializing a class today can be cumbersome at times. Consider, for example, the trivial case of a custom collection type (such as Queue<T>) that internally maintains a private System.Collections.Generic.List<T> property for a list of items. When instantiating the collection, you have to initialize the queue with the list of items it is to contain. However, the reasonable options for doing so with a property require a backing field along with an initializer or an else constructor, the combination of which virtually doubles the amount of required code.


With C# 6.0, there’s a syntax shortcut: auto-property initializers. You can now assign to auto-properties directly, as shown here:


1.      class Queue<T>

2.      {

3.        private List<T> InternalCollection { get; } = 

4.          new List<T>; 

5.        // Queue Implementation

6.        // ...

7.      }

 

 

 

그리고 JSON Data 쉽게 다룰 있는 JObject라는 타입이 새로 나왔습니다.

 

 

 

Figure 3 Leveraging the Indexed Method with JSON Data

1.      using Microsoft.VisualStudio.TestTools.UnitTesting;

2.      using Newtonsoft.Json.Linq;

3.      // ...

4.      [TestMethod]

5.      public void JsonWithDollarOperatorStringIndexers()

6.      {

7.        // Additional data types eliminated for elucidation

8.        string jsonText = @"

9.          {

10.        'Byte':  {

11.          'Keyword':  'byte',

12.          'DotNetClassName':  'Byte',

13.          'Description':  'Unsigned integer',

14.          'Width':  '8',

15.          'Range':  '0 to 255'

16.                  },

17.        'Boolean':  {

18.          'Keyword':  'bool',

19.          'DotNetClassName':  'Boolean',

20.          'Description':  'Logical Boolean type',

21.          'Width':  '8',

22.          'Range':  'True or false.'

23.                    },

24.      }";

25.    JObject jObject = JObject.Parse(jsonText);

26.    Assert.AreEqual("bool", jObject.$Boolean.$Keyword);

27.  }

 



총 10가지 정도가 프리뷰에서 보여졌는데요. 그 중에 크게 변한 2가지 부분을 우선 소개하고 좀더 자세한 사항은 링크를 타고 들어가서 확인하시면 될거 같습니다.





 








C#에서 Enum 타입을 다중값으로 활용 - Flags


참조 URL
  1. http://msdn.microsoft.com/ko-kr/library/cc138362.aspx
  2. http://msdn.microsoft.com/en-us/library/system.enum.hasflag(v=vs.110).aspx
  3. http://stackoverflow.com/questions/8447/what-does-the-flags-enum-attribute-mean-in-c

 


 C#에서 Enum 타입으로 선언해서 프로그래밍을 할 때 하나의 값 대신 복수의 상태를 표시해야 할 때 사용할 수 있는 방법입니다. Enum을 선언시 아래와 같이 Attribute를 달아주면 복수의 상태를 사용할 수 있는 상태가 됩니다.



[코드1] Enum 선언과 사용 방법 ( OR 연산으로 값 추가 )



 위와 같이 선언하고 사용할 수 있으며 선언된 값을 판단하여 사용하는 방법은 아래와 같습니다.


[코드2] & 연산으로 값 비교




[코드3] XOR 연산으로 값 해제




example

[코드4] 다른 방식으로 선언 방법



[코드] 또 다른 선언 방법










 








프로그래밍 정보 얻는 사이트 - 영어 사이트


참조 URL
  1. http://www.youtube.com/user/googletechtalks
  2. http://www.parleys.com/home
  3. http://www.infoq.com/
  4. http://channel9.msdn.com/
  5. https://www.coursera.org/
  6. http://www.zdnet.co.kr/column/column_view.asp?artice_id=20131111104547

 

 

 

 

.NET Rocks - 닷넷과 관련된 최신기술 동향에 대해서 양질의 대화

The Basement Coders - 소프트웨어 개발 일반에 대해서 흥미로운 이야기

Cake Solutions Software Development - 빅데이터나 병렬처리와 관련한 최신기술을 이야기

Chariot Solutions - 소프트웨어 업계 리더들과 수행한 인터뷰를 주로 소개

Deep Fried Bytes - 닷넷기술에 대해서 대화

Hanselminutes - 다양한 기술일반을 다룸

The Java Posse - 자바 기술을 다룸

Java Pub House - 자바 기술을 다룸

 

 

 

 

 

 

C# AppDomain에서 DataDirectory 세팅하기




 ASP.NET에서는 Framework단에서 세팅되는 DataDirectory의 값이 WPF나 Winform, Console Application 에서는 세팅이 되어 있지 않는다. 그래서 EF를 통해 SDF(Compact SQL) 파일이나 LocalDB를 통해 동적으로 DB를 생성시 전혀 엉뚱한 곳에서 물리적인 파일이 생성이 된다. EF를 통해 생성시 AppDomain의 DataDirectory의 값으로 위치를 찾아 파일을 만든다.


 아래와 같이 AppDomain에 값을 저장할 수 있다.


AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));

[코드1] AppDomain의 DataDirectory에 값 세팅



 "코드1"에서와 같이 세팅 후 "코드2"와 같이 실행하면 AppConfig에 설정된 값을 기준으로 DB 파일을 만들게 된다.


using (ContentContext context = new ContentContext())
{
    var content = context.Contents.FirstOrDefault();
}

[코드2] DBContext를 통해 데이터 생성




<entityFramework>   <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">     <parameters>       <parameter value="System.Data.SqlServerCe.4.0" />       <parameter value="|DataDirectory|"/> <!-- 주석처리 가능 -->       <parameter value=""/> <!-- 주석처리 가능 -->     </parameters>   </defaultConnectionFactory>   <providers>     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />     <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />   </providers> </entityFramework>

[코드3] App.Config에서 entityframework 섹션 내용


 "코드3"의 "Parameter"의 값을 기준으로 파일을 생성하게 된다.




 


 

C#에서 실행되는 폴더 알아 내기

(윈도우 서비스, 테스트 프로젝트, ...)


참조 URL
  1. http://stackoverflow.com/questions/1658518/getting-the-absolute-path-of-the-executable-using-c



윈도우 서비스나 테스트 프로젝트에서 실행을 하면 내가 코딩한 DLL이 위치하는 폴더와 실제 실행되는 프로세스의 위치가 상이한 경우가 발생할 수 있다. 이럴경우 기대한 경과와 다르게 에러가 발생할 수 있다. 예로 파일을 읽어 오는 부분이나 환경설정을 읽어 오는 부분에서 경로가 맞지 않아 에러가 발생할 수 있다. 아래 코드와 같이 실행되는 프로세스나 어셈블리의 위치를 알아 내는 방법이 몇가지로 제공을 하고 있다.



var path1 = Environment.CurrentDirectory;
var path2 = Directory.GetCurrentDirectory();
var path3 = new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName;
var path4 = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
var path5 = Thread.GetDomain().BaseDirectory;
var path6 = AppDomain.CurrentDomain.BaseDirectory;

[코드1] 폴더 위치 가져오기


위 "코드1"에서와 같이 폴더를 알아 낼 수 있지만 path1과 path2는 실행되는 프로세스를 중심으로 폴더를 알아내고 path3 ~ path6은 어셈블리를 기준으로 폴더를 알아내는 구조로 되어 있다.



위와 같은 코드를 윈도우 서비스에서 실행하면 아래와 같은 폴더의 위치가 달라지게 된다.


path1 : C:\Windows\System32

path2 : C:\Windows\System32

path3 : C:\User\xxxx\Visual Studio\Project\xxxx

path4 : C:\User\xxxx\Visual Studio\Project\xxxx

path5 : C:\User\xxxx\Visual Studio\Project\xxxx

path6 : C:\User\xxxx\Visual Studio\Project\xxxx



위와 같이 값을 확인 할 수 있을 것이다.


필요에 따라 값을 가져오는 방법을 달리 하여 가져오면 될 것이다.


 


 

 


 









Windows 7 이후 추가된 Task Bar에서 Application Title 변경 하기 - JumpList, Taskbar, Application Title


참조 URL
  1. http://blogs.windows.com/windows/archive/b/developers/archive/2009/04/03/windows-7-taskbar-net-sample-library-an-overview.aspx
  2. http://channel9.msdn.com/blogs/yochay/windows-7-new-taskbar-an-overview
  3. http://blogs.microsoft.co.il/blogs/sasha/archive/2009/02/12/windows-7-taskbar-apis.aspx
  4. http://archive.msdn.microsoft.com/Windows7Taskbar
  5. http://msdn.microsoft.com/en-us/windows/ee624070.aspx
  6. http://archive.msdn.microsoft.com/Windows7Taskbar/Release/ProjectReleases.aspx?ReleaseId=2246
  7. http://imny.tistory.com/entry/TaskBar-Programming-Vol1
  8. http://msdn.microsoft.com/ko-kr/library/system.windows.shell.jumplist(v=vs.100).aspx



 - 프로젝트에서 'AssebmlyInfo.cs' 파일에서 수정하기

 - 레지스트리로 변경하기




Windows 7에서 새로운 기능이 추가된 Baskbar에서 Application Title을 변경하는 방법에 대해서 알아 보도록 하겠다. 응용 프로그램중에 .Net 개발자들이 가장 많이 사용하는 Visual Studio를 타스크바에서 확인해 보자.




[그림1] Visual Studio를 타스크바에서 오른쪽 클릭해 확인한 화면



[그림2] Visual Studio를 타스크바에서 오른쪽 클릭해 확인한 화면



위 '그림2'과 같이 점프 리스트(Jumplist)와 응용프로그램명을 확인할 수 있는 대화 상자가 나온다. 이 부분이 새로 추가된 부분이며 이번 포스팅에서는 그 중에서 'Visual Studio 2012' 부분의 명칭을 변경하는 방법에 대해 알아 보도록 하겠다.


아래 '그림2'와 같이 Visual Studio에서 WPF 프로젝트를 만듭니다.



[그림3] WpfApplication1의 이름으로 WPF 프로젝트를 화면



[그림4] WpfApplication의 타스크바 화면



생성된 프로젝트를 F5를 눌러 실행하고 타스크바에서 오른쪽 클릭하면 '그림3'과 같이 비슷한 모습이 보일 것이다. 프로그램명이 'WPFApplication1"로 되어 있다. 이 프로그램명을 수정해 보자. 



[그림5] WpfApplication1의 AssemblyInfo.cs


'그림4'와 같이 프로젝트에서 'AssemblyInfo.cs' 파일을 열어 보자. 기본값으로 아래 '코드1'과 같이 되어 있을 것이다. 


using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
 
// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assemblyAssemblyTitle("WpfApplication1")]
[assemblyAssemblyDescription("")]
[assemblyAssemblyConfiguration("")]
[assemblyAssemblyCompany("")]
[assemblyAssemblyProduct("WpfApplication1")]
[assemblyAssemblyCopyright("Copyright ©  2013")]
[assemblyAssemblyTrademark("")]
[assemblyAssemblyCulture("")]

[코드1] AssebmlyInfo.cs 파일 코드



위 부분에서 AssemblyTitle의 값을 'My WPF Application Test #1'로 변경하고 다시 실행하여 확인하여 보자. 




[그림6] 타스크바에서 오른쪽 클릭해 확인한 화면



위와 같이 변경된 모습을 확인 할 수 있다. 




Tip !


 만약 정상적으로 확인이 되지 않는다면 캐시되어 있는 값이 있어서 이다. 그럴 때는 '그림7'과 같이 'Assembly Name'을 변경하여 다시 읽어 들이도록 하면 변경됨을 확인할 수 있다.



[그림7] 프로젝트 속성 화면

 



----------------------------------------------------------------------------



응용 프로그램명을 바꿀 수 있는 또 다른 방법이 있다. 레지스트리 편집기를 이용해서 곧바로 수정할 수 있다. 아래 '그림8' 처럼 확인할 수 있다.



[그림8] 레지스트리 값



레지스트리 경로는 '컴퓨터\HEKY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache'의 경로에서 'WpfApplicationTest.exe.FriendlyAppName'명과 같은 패턴으로 찾아서 값을 변경하면 된다. 



[그림9] 레지스트리 변경 화면



위와 같이 레지스트리에서 변경하면 곧바로 반영이 된다. 

Visual Studio Magagine

Windows 8, Visual Studio, HTML5 & Javascript Tutorials )


참조 URL
  1. http://visualstudiomagazine.com/Home.aspx
  2. http://visualstudiomagazine.com/pages/topic-pages/visual-studio-tutorials.aspx
  3. http://visualstudiomagazine.com/pages/topic-pages/windows-8-tutorials.aspx




MS .Net Framework와 HTML, Javascript에 대한 튜토리얼을 얻을 수 있는 사이트이다. 여러가지 최신 정보와 기술을 접할 수 있는 기회가 될 것이다.





 

 


 


Visual Studio 2012 Update 4 Announced


참조 URL
  1. http://visualstudiomagazine.com/articles/2013/07/31/vs-2012-update-4.aspx
  2. http://blogs.msdn.com/b/bharry/archive/2013/07/30/vs-2012-4-update-4-will-exist.aspx
  3. http://support.microsoft.com/kb/2872520
  4. http://www.microsoft.com/ko-kr/download/details.aspx?id=40263



http://support.microsoft.com/kb/2872520


위 링크에 가서 보면 해결된 문제점이 몇가지가 있는데 그중에 TFS와 IDE, .NET Framework만 발췌 하였다. 더 많은 정보는 해당 링크에서 직접 확인해 보기 바란다.


해결 된 문제

참고 지정 하지 않을 경우 연결 된 항목을 Microsoft 연결 웹 페이지를 이동 합니다.
Team Foundation Server

    관리 및 운영
    • 설치 된 Microsoft SQL Server 인스턴스가 있는 컴퓨터에 Team Foundation Server (TFS) 2012 응용 프로그램 계층 서버를 설치 하는 가정 합니다. Microsoft SQL Server Reporting Services를 구성 하지 마십시오. 이 경우 응용 프로그램 계층 서버를 업그레이드할 수 없습니다.
    • TFS 2012에 대 한 SQL Server 서비스가 가상 계정으로 실행 중인 경우 예약 된 백업의 구성을 더 이상 차단 (예: NT Service\MSSQLSERVER).
    • TFS 2012 업데이트 2 및 3 업데이트 트랜잭션 백업을 하려고 하는 동안 전체 또는 차등 백업을 실행 하는 경우 오류를 기록 합니다.
      백업이 전체 또는 차등 백업을 실행 하는 경우 트랜잭션 백업을 더 이상 실행을 예약 합니다. 대신, 다른 백업 실행이 완료 될 때까지 작업을 중지 것입니다.
    • TFS 업그레이드 구성 및 호스트 헤더와 함께 지 속성 설정 지원합니다. TFS 전체 업그레이드 과정에서 잘못 된 호스트 헤더를 발견 한 경우 오류를 기록 합니다.

    민첩 한 계획
    • 여러 팀 프로젝트에 포함 된 TFS 2012 인스턴스에 있다고 가정 합니다. TFS SharePoint 포털에서 대시보드 페이지를 열 때 성능이 저하 하 고 오류 메시지가 나타날 수 있습니다.
    • 터키어 로캘 사용 하 여 컴퓨터 및 2012 Visual Studio에서 작업 항목에 인라인 이미지를 업로드 합니다. 다른 클라이언트에서 이미지를 볼 수 없습니다.

    빌드 자동화
    • TFS 2010 서버는 업그레이드 템플릿을 사용 하 여 제어 된 체크 인 빌드 정의를 만들 가정 합니다. 2012 TFS 서버에 TFS 2010 서버를 업그레이드 하 고 TFS 2010 빌드 에이전트와 함께 업그레이드 된 TFS 서버를 사용 합니다. 이 경우 TFS 2010 빌드 실패 빌드 에이전트에서 체크 인 작업을 수행 하는 경우.
    • TFS 2010 서버에서 기본 서식 파일을 사용 하 여 빌드 정의 만든다고 가정 합니다. TFS 2012 TFS 2010에서 서버를 업그레이드할 때 업그레이드 새로 업로드 된 서식 파일에 대해 실행할 빌드 정의 수정 됩니다.
    • 790415: 실행 중인 빌드를 빌드 정의 저장 하려면 IBuildDefinition.Save 메서드를 호출 하면 예외가 발생 합니다.
    • "로그의 zip 파일이 없는 만들어진 보관 작업 실패" 경고는 빌드가 성공적으로 완료 되 면 발생 합니다.
    • IndexSources는 워크플로 활동 환경을 성능 저하를 빌드합니다.
    • 오랜 시간 동안 실행 되는 예약 된 빌드를 빌드는 다음 날 수동으로 중지 합니다 가정 합니다. 수동으로 큐 대기 된 빌드 다시, 다음 예약 된 빌드를 표시 되지 않습니다.

    버전 제어
    • 사용자의 표시 이름으로 사용자 기록을 필터링 하는 보기를 열 때 오류 메시지가 발생 합니다. 표시 이름에 쉼표와 같은 특수 문자를 포함 하는 경우이 문제가 발생 합니다.
    • 가정에서 TFS 서버에 큰 파일을 확인 하십시오. 파일을 업로드할 수 없습니다. 파일에 다시 체크 때 이전 한 상태 업로드 프로세스가 실패 하는 오류 메시지가 나타납니다.
    • 파일을 편집 하 고 저장 하지 않으면 가정 합니다. 보류 중인 변경 내용 창에서 파일을 체크 하지 파일을 저장 하 라는 메시지가 나타날 수 있습니다.

    작업 항목 추적
    • Internet Explorer 사용 하 여 작업 항목 저장소를 사용 하는 페이지를 탐색할 때 60 초 지연이 있습니다. 175 개 이상의 팀 프로젝트 컬렉션에 포함 되어 경우이 문제가 발생 합니다.
    • 만들거나 작업 항목을 편집 하는 기능 팀 많은 영역 경로와 관련 된 작업을 중지 합니다.
    • 지시 간판 보드에서 항목을 이동 하는 기능이 혼합 된 문화를 일부 환경에서는 작동 하지 않습니다.
    • 쿼리 상수를 포함 하는 담당자 필드와 함께 저장 될 때 표시 이름 상수 TFS 그룹 이기도 한 경우에 쿼리를 실행 하 고 저장 한 후 사용자가 올바른 쿼리 결과 표시 되지 않습니다.
    • (예를 들어, 작업 항목을 저장) 중 예외를 발생 시키는 TFS 2012 서버 플러그 인, 일반적인 AJAX 예외 대신 실제로 플러그 인에서 throw 되는 예외는 사용자에 게 표시 됩니다 가정 합니다.
    • TFS 사용자 영역에 작업 항목에 대 한 쓰기 사용 권한이 없는 그룹에서 작업 항목의 영역 쓰기 권한을 다른 영역으로 변경.

    웹 액세스
    • 예기치 않은 사용자 에이전트 문자열 함께 웹 브라우저를 사용 하 여 2012 TFS 서버에 연결 하려고 하면 대신 요청한 페이지 내부 오류 페이지가 나타납니다. 또한 TFS 웹 액세스 페이지를 액세스할 수 없습니다.
    • 2012 TFS 서버에 Project Server와 동기화 하도록 구성 되어 있다고 가정 합니다. TFS web access에서 복사한 작업 항목을 저장 하려고 하면 다음 오류 메시지가 나타날 수 있습니다.



Visual Studio IDE

  • Visual Studio 2012 Telerik Justcode 또는 Codesmith 도구를 설치할 때 임의로 충돌 합니다.
  • 프로젝트 대화 보고서 형식이 잘못 Windows 8.1 미리 보기.
  • Visual Studio 프로젝트에 속하지 않는 데이터 집합 (.xsd) 파일을 가정 합니다. 2012 Visual Studio에서 데이터 집합 파일을 열 때 매개 변수가 잘못 되었습니다 내용의 오류 메시지가 나타납니다.


.NET Framework의 핵심

  • NuGet에서 이식 가능한 클래스 라이브러리에 대 한 지원을 추가합니다.



 





+ Recent posts