NAntで.NET 2.0アプリケーション用に新しいVB9コンパイラを使用するにはどうすればよいですか?
-
03-07-2019 - |
質問
.NET 2.0をターゲットとするアプリケーションの作成時にVS2008が使用するVBコンパイラと同じVBコンパイラを使用するようにNAntに指示するにはどうすればよいですか?
Webアプリケーションを.NET 2.0にバックターゲットするVS2008に切り替えました。これを行うと、NAnt(0.85rc4、0.85、および0.86b1)を正常に実行できます。 VS2008で.NET 2.0バイナリに戻ってコンパイルできるVB9構文の一部を使用しようとすると、NAntは、VS2005で新しい構文を実行しようとした場合に発生するようなコンパイルエラーを取得します。サポートされていません)。
それが役立つ場合、これは私がしようとしているものの単純化されたバージョンであり、VS2008の代わりにNAntを使用して2.0アプリを構築しようとするまでうまく機能する単純な匿名デリゲートです。
Public Class SomeObject
Public Name As String
End Class
Private SomeList As List(Of SomeObject) = SomeObject.GetAllSomeObjects()
Public Function FindFirstItemWithSimilarName(ByVal x As String) As SomeObject
Return SomeList.Find(Function(p As SomeObject) p.Name.Contains(x))
End Function
編集:誰かがそうしない理由を考えられない限り、私のビルドファイルの現在の設定はこれです(実際には.NET 2.0アプリケーションが必要なので、より堅牢なVBコンパイラ):
<property name="nant.settings.currentframework" value="net-2.0"/>
解決 2
NAntへの期待において、私は文字通りに少しばかりでした。 NAntContribを使用してプロジェクトでmsbuildを実行していたので、NAntのnet-3.5フレームワークが必要でした。 MSBuildとプロジェクトファイルは、.NET 2.0へのプロジェクトのバックターゲティングを処理します。 VB匿名デリゲートを取得して3.5にコンパイルし、生成されたDLLを.NET 2.0のみを搭載したマシンにドロップすることができました。
.NET 2.0にコンパイルするようにプロジェクトを設定するだけです:プロジェクトのプロパティ-&gt;コンパイル[タブ]-&gt;高度なコンパイルオプション...-&gt;ターゲットフレームワーク(すべての構成):.NET Framework 2.0
...そしてNAntに盲目的にnet-3.5を仮定するように指示する:
<property name="nant.settings.currentframework" value="net-3.5"/>
他のヒント
NAntが実行しているフレームワークを変更する必要があるかどうか下
また、 NAntContrib プロジェクトを調べます。これにはMSBuildタスクがあります。これを使用して、2008年のプロジェクトを構築します。ここでは、2.0アセンブリまで、必要なもののような派手なsytax sugarを使用しています。ただし、C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727のMSBuild.exeを3.0 MSBuild.exeに転送するものに置き換える必要がありました
これは、2.0パスのMSBuild.exeを置き換えるために使用するコードです。このコードをどこで入手したか思い出せません。オンラインで見つけようとしましたが、できません。
これをMSBuild.exeにビルドし、2.0をMSBuild.exeに置き換えます。
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace MSBuild
{
public class Program
{
public static int Main(string[] args)
{
for (int argIndex = 0; argIndex < args.Length; argIndex++)
{
if (args[argIndex].Contains(" "))
{
string quotedArg = string.Format("\"{0}\"", args[argIndex]);
args[argIndex] = quotedArg;
}
}
string arguments = string.Join(" ", args);
// HACK: I should probably change
// this to automaticlaly
// determine the path
Process process = Process.Start("C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe",arguments);
process.WaitForExit();
return process.ExitCode;
}
}
}