4

新しい ASP.Net および Web Tools 2012.2 Publish Profilesを Web サイト (Web アプリケーションではない) に使用しています。

Web サイトのルートに ファイルを作成したツールを使用して、発行プロファイルを作成しました。website.publishproj

website.publishprojファイルには次のものが含まれます。

<AssemblyAttributes Include="AssemblyFileVersion">
    <Value>$(AssemblyFileVersion)</Value>
</AssemblyAttributes>
<AssemblyAttributes Include="AssemblyVersion">
    <Value>$(AssemblyVersion)</Value>
</AssemblyAttributes>

これは、プロパティを MSBuild に渡して、出力 dll のバージョンを設定できることを示唆しています。

ただし、Web サイトの 1 つの出力アセンブリ (コンパイルされてから 1 つのアセンブリにマージされる) には、常にバージョン番号があり1.0.0.0ます。

パスしようとしまし/p:AssemblyFileVersion=2.1.0.0;AssemblyVersion=2.1.0.0たが、これは効果がありません。

website.publishproj ファイルを直接編集してみましたが、これも効果がありません。

出力アセンブリを単一のアセンブリにマージしたい場合に、Webサイトプロジェクトで出力アセンブリのバージョン番号を設定する方法を知っている人はいますか?

4

3 に答える 3

5

私はこの問題を解決することができました。ツールのバグだと思います。

プロパティをファイルOutputPath内の相対パスに設定すると、およびプロパティは無視されます。website.publishprojAssemblyVersionAssemblyFileVersion

これは、Web サイト アセンブリを 1 つのアセンブリにマージするときに、このバージョン管理がどのように機能するかによるものです。

AssemblyInfo.cs展開中にファイルが生成され、提供されたバージョン番号が入力されます。このファイルは、渡されたバージョン番号を含む にAssemblyInfo.csコンパイルされます。AssemblyInfo.dll

その後、以前に生成された it を指す引数aspnet_merge.exeで呼び出されます。copyattrsAssemblyInfo.dll

OutputPath相対パスを設定すると、このcopyattrs引数は存在しない dll を指します。これは、aspnet_merge.exe ツールが存在するパスから実行されるためです。したがって、アセンブリに戻る相対パスでは、そのAssemblyInfo.dll本当の場所が見つかりません。

OutputPath相対することはできません。

この問題を解決するために、私は次のように設定しました。

<PropertyGroup>
    <OutputPath>$(MSBuildProjectDirectory)\..\..\TempPackageBuildDir\</OutputPath>
</PropertyGroup>

なぜわざわざ設定するのOutputPathですか?

を設定しないOutputPathと、環境変数で一時ディレクトリが使用されます。私の場合、一部のファイルのファイル長が 260 文字のウィンドウ制限を超えていたため、これによりビルドが失敗しました (非常に大きな Web サイトを持っています)。ビルドする唯一の方法はOutputPath、より浅いパスに設定することでした。

于 2013-03-01T08:21:22.930 に答える