1

私は MSVS を初めて使用し、1 つの実行可能プログラムと 1 つの DLL を作成する必要があるようです。msbuild でビルドしようとしている DLL 用のvcxprojファイルを含む MSVS 2013 プロジェクトがあります。

MSVS からビルドを実行すると${ROOT_PROJECT_FOLDER}/${PROJECT_NAME}/Release、ビルド ログが保存されているようなフォルダーが作成されます。また、exp、lib、および pdb ファイルを使用して DLL 自体を作成します。に位置しています${ROOT_PROJECT_FOLDER}/Release

しかし、私が実行しようとしているとき

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe cryptoApiLib\cryptoApiLib.vcxproj /t:Build /p:PreferredToolArchitecture=x86 /p:Platform=Win32 /p:PlatformToolset=v120_xp /p:Configuration=Release /p:TargetFrameworkVersion=v3.5

ルート プロジェクト フォルダーから、DLL は${ROOT_PROJECT_FOLDER}/${PROJECT_NAME}/Release. で作成する必要があります${ROOT_PROJECT_FOLDER}/Release。私が間違っていることは正確にはわかりません。

vcxprojファイルの一部を次に示します。

...
<ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{ECFFC1B0-5155-41C7-8C03-DD94EB590E3A}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>cryptoApiLib</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v120_xp</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v120</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LinkIncremental>true</LinkIncremental>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LinkIncremental>false</LinkIncremental>
  </PropertyGroup>
  ...

そして、それがvcxproj で msbuild を実行する方法です:

 C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe cryptoApiLib\cryptoApiLib.vcxproj /t:Build /p:PreferredToolArchitecture=x86 /p:Platform=Win32 /p:PlatformToolset=v120_xp /p:Configuration=Release /p:TargetFrameworkVersion=v3.5 

何か提案はありますか?

4

1 に答える 1

0

/p:OutDir最初の試行でパラメーターが機能しなかった理由がわかりません。プロジェクトのプロパティを調べて、それを msbuild パラメーターとして渡すというアイデアを思いつきました。そして、ついにそれが機能しました。ビルド バッチ ファイルは次のようになります。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe cryptoApiLib\cryptoApiLib.vcxproj /t:Rebuild /p:PreferredToolArchitecture=x86 /p:Platform=Win32 /p:PlatformToolset=v120_xp /p:Configuration=Release /p:TargetFrameworkVersion=v3.5 /p:OutDir=%~dp0\Release

うまくいけば、他の誰かを助けるでしょう。ありがとう。

于 2015-06-16T07:38:55.017 に答える